Bitte werfen Sie einen Blick auf die folgende Probe mit:NSubstitute, behaupten bei eingehenden Anrufen wird Argumente gegen object.ReferenceEquals
public interface IDomainClass
{
int A { get; set; }
void CalledMethod(IDomainClass data);
}
public class DomainClass : IDomainClass
{
public int A { get; set; }
public void CalledMethod(IDomainClass data)
{
throw new NotImplementedException();
}
}
Und den folgenden Test:
[Test]
public void TestSample()
{
//Arrange
IDomainClass testingClass = Substitute.For<IDomainClass>();
IDomainClass data = new DomainClass() { A = 123, };
IDomainClass expectedResult = new DomainClass() { A = 123, };
//Act
testingClass.CalledMethod(data);
//Assert
testingClass.ReceivedWithAnyArgs(1).CalledMethod(null); //ok
data.ShouldBeEquivalentTo(expectedResult); //ok
testingClass.Received(1).CalledMethod(expectedResult); //fail
}
Das Problem ist, dass ich Ich weiß nicht, wie man die Argumente im empfangenen Call (CallMethod) testet. Wie es ist, werden die Argumente mit ersten object.ReferenceEquals und dann object.Equals verglichen, und da ich in der Regel keine Kontrolle über die gelieferten Daten an die Methode habe, verweisen die Objekte (data und expectedResult) niemals auf dasselbe Objekt.
Allerdings gibt es eine Möglichkeit, es funktioniert, und das ist, wenn ich Equals außer Kraft setzen, wie folgt aus:
public override bool Equals(object obj)
{
return this.A.Equals((obj as DomainClass).A);
}
public override int GetHashCode()
{
return this.A.GetHashCode();
}
Dies funktioniert, aber ich will nicht Equals implementieren, einen Test zu erfüllen weil es alle möglichen anderen Auswirkungen haben wird, die hier nicht erwähnenswert sind.
Was ich will, ist ein Vergleich die gleiche eine Linie, die die zweite assert tun:
data.ShouldBeEquivalentTo(expectedResult);
Aber dies ist nicht standardmäßig unterstützt.
Also, wie löse ich dieses Problem. Danke.
Nun, ich stimme zu, die Fehlermeldung ist nicht schön, aber es ist ein Workaround und wird für den Moment tun, bis eine bessere Implementierung veröffentlicht wird ... –