У меня есть класс, и я хочу проверить, вызывается ли метод, регистрируется ли журнал.
public class LoggerAdapter<TheClassWhichHasTheMethod>: ILoggerAdapter<etc>
Это адаптер, который я сделал. Итак, у меня есть методы, которые я использую и которые мне нужны в классе регистратора, и я поместил их в класс регистратора адаптера.
public void MethodOne(param1, param2, param3, param4)
И этот метод void сам по себе вызывает следующий метод внутри адаптера:
public void MethodTwo(param1, param2, param3, param4)
После этого регистрация завершается. Но подождите, есть еще. Метод, в котором регистратор выполняет свою работу, выглядит следующим образом:
public async Task Execute()
{
await //some logic
//some more logic
Here the logger does its job: _logger.MethodOne(param1, param2, param3)
//After logging finishes, more logic follows
}
Теперь интерфейс адаптера необходимо расширить ILogger, потому что мне нужен ILogger как один из моих param. Дело в том, что после того, как я сделаю часть Act:
//await _classInstance.Execute();
И поскольку я тестирую метод void, есть некоторый тайм-аут. Хорошо, тайм-аут заканчивается, но после этого я понятия не имею, как проверить, зарегистрировался ли регистратор, т.е. запускается _classInstance.Execute(), регистратор вызывает MethodOne, который вызывает MethodTwo, и после этого он завершается.





Вы знаете, я бы посоветовал вам использовать библиотеку Moq. В этой библиотеке есть классный метод Verify, где вы можете проверить, был ли вызван ваш метод или нет.
Вам нужно сделать что-то вроде этого:
var objectA = new Mock<ObjectA>();//ОбъектA имеет метод1, метод2. Method1, Method2 должны быть общедоступными виртуальными или принадлежать интерфейсу, поэтому ObjectA должен реализовать этот интерфейс;
Затем objectA.Verify(o=>o.Method1(), Times.Once);//И то же самое с Method2.
@Nolmagination Вызов вообще не произошел. Но когда я отлаживаю, он проходит как через MethodOne, так и через MethodTwo. Может быть, я передаю неправильный объект в качестве параметра?
@EdwardchoVaklinov Да, скорее всего, это так. Вы должны написать что-то вроде этого в параметрах objectA.Verify(o=>o.Method1(It.IsAny<param1_type>(), It.IsAny<param2_type>()........))
@EdwardchoVaklinov, какая у тебя ошибка? В обозревателе тестов в Visual Studio вы можете проверить, почему ваш тест не прошел. Помните, что ваши методы ДОЛЖНЫ быть либо в интерфейсе, либо в общедоступном виртуальном. ЭТО ВАЖНО