J'ai rencontré un problème lors de la configuration d'un test pour une méthode Equals sur un objet.Exceptions de RhinoMocks lors du tronquage Méthode Equals
L'objet en question est définie par cette interface:
public interface IHours {
ITimeOfDay OpenAt { get; set; }
ITimeOfDay CloseAt { get; set; }
DateTime ValidFrom { get; set; }
DateTime ValidTo { get; set; }
bool isCovered(DateTime time);
}
et il contient des références à ITimeOfDay définies comme:
public interface ITimeOfDay {
DateTime Time { get; set; }
int Hour { get; }
int Minute { get; }
int Second { get; }
}
Maintenant, je veux Egaux des Heures: IHours pour vérifier la OpenAt et CloseAt IHours. Pour mettre cela en place, j'essaie de sortir ces valeurs de propriété, et de retourner juste vrai et faux en fonction de ce que mon test particulier a besoin d'être.
[SetUp]
public virtual void SetUp() {
mocks = new MockRepository();
defaultHours = getHours();
otherHours = getHours();
}
[TearDown]
public virtual void TearDown() {
mocks.ReplayAll();
mocks.VerifyAll();
}
[Test(Description = "Equals on two Hours should regard the fields")]
public void Equals_TwoValueEqualledObjects_Equal() {
var openAt = mocks.Stub<ITimeOfDay>();
var closeAt = mocks.Stub<ITimeOfDay>();
closeAt //this is line 66, referenced in the error stacktrace
.Stub(o => o.Equals(null))
.IgnoreArguments()
.Return(true);
openAt
.Stub(c => c.Equals(null))
.IgnoreArguments()
.Return(true);
mocks.ReplayAll();
defaultHours.OpenAt = openAt;
otherHours.OpenAt = openAt;
defaultHours.CloseAt = closeAt;
defaultHours.CloseAt = closeAt;
Assert.That(defaultHours, Is.EqualTo(otherHours));
Assert.That(defaultHours.GetHashCode(), Is.EqualTo(otherHours.GetHashCode()));
}
Mais je reçois cette erreur cryptique quand je le lance:
System.InvalidOperationException: Type 'System.Boolean' doesn't match the return type 'System.Collections.Generic.IList`1[NOIS.Model.Interfaces.IAircraft]' for method 'IAircraftType.get_Aircrafts();'
at Rhino.Mocks.Expectations.AbstractExpectation.AssertTypesMatches(Object value)
at Rhino.Mocks.Expectations.AbstractExpectation.set_ReturnValue(Object value)
at Rhino.Mocks.Impl.MethodOptions`1.Return(T objToReturn)
at Nois.Test.Model.Entities.HoursTest.Equals_TwoValueEqualledObjects_Equal() in HoursTest.cs: line 66
L'interface IAircraftType est une partie du même espace, mais nulle part dans le test, l'interface ou une classe implémentant est-il fait référence. Je ne comprends pas pourquoi cela interfère. Il n'y a aucune référence à cela autant que je peux rassembler.
J'utilise - Rhino.Mocks v3.5.0.1337 - NUnit.Framework v2.5.0.8332
Quelqu'un a une idée?
Ceci est un test assez compliqué - est-il possible de rendre le code complet disponible?Je vais passer à travers cela et voir si je peux reproduire votre erreur, mais ça va être difficile sans la source –
Nevermind, voir ma réponse - c'est en fait un cas très intéressant. –
Je ne peux pas fournir la source complète à tout, désolé. Je vais essayer de choisir autant que nécessaire et le mettre dans un projet distinct. Si cela produit encore l'exception étrange, je l'afficherai. – Tomas