Я досить нова в одиничному тестуванні на C # і вчаться використовувати Moq. Нижче наведено клас, який я намагаюся перевірити.
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
Нижче знаходиться мій TestClass:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
Я отримую таке виняток:
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
Я просто хочу перевірити, викликається чи ні метод "MyMethod". Я щось пропускаю?
вибачте .. Я відредагував своє запитання ..
—
user591410
Ви на правильному шляху, але у розміщеному коді є помилки. Він не буде компілюватися - обробка на Someclass, недійсна віддача на DoSomething. Після цього вам потрібен загальнодоступний доступ, а потім зробіть DoSomething віртуальним. Коротше кажучи, у вас, ймовірно, є помилка і у виробничому коді.
—
TrueWill
Дякую за Вашу відповідь. Я встановлював аргументи неправильно під час налаштування методу макету ..
—
user591410
"Налаштування не налаштовано." Може ввести в оману. Вам не потрібно налаштовувати поведінку на методи, які будуть викликатися. А також не забудьте виконати метод "Перевірити" ПІСЛЯ методу, який ви тестуєте, слід викликати (так що у вашому випадку це нормально).
—
Сіелу
SomeClass
нього немає визначення дляMyMethod(string)
якого, схоже, це не так.