У меня есть этот класс:C# Nunit Moq Невозможно сделать тестовый проход
class MyClass
{
private ISomeInterface blabla;
public MyClass() : this(new SomeInterfaceImplementation()) {}
internal MyClass(ISomeInterface blabla)
{
this.blabla = blabla;
}
public void SomeMethod(string id, int value1, int value2)
{
this.blabla.DoSomethingWith(id, new ValueClass(value1, value2))
}
}
У меня также есть этот тест:
[TestFixture]
public class MyClassTest
{
private const string ID = "id";
private const int VALUE1 = 1;
private const int VALUE2 = 2;
private ValueClass valueClass;
private Mock<ISomeInterface> mockInterface;
private MyClass myClass;
[SetUp]
public void SetUp()
{
this.valueClass = new ValueClass(VALUE1, VALUE2);
this.mockInterface = new Mock<ISomeInterface>();
this.myClass = new MyClass(this.mockInterface.Object);
}
[Test]
public void GIVEN_AnID_AND_AValue1_AND_AValue2_WHEN_DoingSomeMethod_THEN_TheSomeInterfaceShouldDoSomething()
{
this.myClass.SomeMethod(ID, VALUE1, VALUE2);
this.mockInterface.Verify(m => m.DoSomethingWith(ID, this.valueClass), Times.Once()); //<- Test fails here!
}
}
Я не знаю, почему, но я не могу получить этот тест проходить. NCrunch дает мне следующее сообщение об ошибке:
Moq.MockException: Прогнозный вызов на издеваться один раз, но был 0 раз: м => m.DoSomethingWith ("ID", .valueClass) Нет расстановок сконфигурированные ,
Выполненные вызовы:
ISomeInterface.DoSomethingWith ("ID", MyNamespace.ValueClass) при Moq.Mock.ThrowVerifyException (MethodCall ожидалось, IEnumerable
1 setups, IEnumerable
1 actualCalls, выражение Выражение, Времена раза, Int32 CallCount) на Moq.Mock.VerifyCalls (перехватчик targetInterceptor, MethodCall ожидается, выражение Expression, времена раз) при Moq.Mock.Verify [T] (Тестовая модель 11 mock, Expression
выражения, времена раза, String failMessage) на Moq.Mock выражение, времена) at Tests.MyClassTest.GIVEN_AnID_AND_AValue1_AND_AValue2_WHEN_DoingSomeMethod_THEN_TheSomeInterfaceShouldDoSomething() в C: \ MySourceCode \ Номер файла и строки здесь.
Как вы можете видеть, похоже, Moq «не видит» мой вызов, вероятно, из-за new ValueClass(value1, value2)
, как я могу сделать этот тест пройти или как я могу изменить свой дизайн, так что легче проверить? Где я должен положить new ValueClass(value1, value2)
?
EDIT:
Это вопрос, который я должен спросить по разработке программного обеспечения вместо StackOverflow? Разве это невозможно?
Он пытается сравнить различные классы значений, которые находятся в тестируемом методе. используйте 'It.Any()'. вы также можете применить предикат, если хотите сравнить поля/свойства, если они открыты. –
Nkosi