Недавно я добавил новый метод в свой репозиторий, так как мне нужно обрабатывать вызовы базы данных в режиме транзакций, и все работает хорошо, но теперь, когда я пытаюсь настроить юнит-тесты, у меня возникла проблема.
Мой новый метод void (т.е. InTransaction) принимает Action
в качестве параметра, в котором я могу просто передать ему анонимный метод:
myFunction()
{
MyObject data1 = null;
MyObject data2 = null;
UnitOfWork.InTransaction(() =>
{
data1 = DoSomething(a,b,c);
data2 = DoSomething(a,b,c);
UnitOfWork.Save();
});
var isValidData1 = IsValid(data1);
var isValidData2 = IsValid(data2);
}
Проблема, с которой я сталкиваюсь,что мне все еще нужны data1 и data2, чтобы установить какое-то значение, или моя функция IsValid сработает, так как не принимает ноль (упрощенное объяснение, кстати!).
DoSomething - это закрытый метод, он по-прежнему вызывает другие публичные функции / методы, которые также являются поддельными.
, если я вызываю приведенный выше код
Мой метод DoSomething является частным, но онисовершают вызовы без этого нового метода InTransaction:
myFunction()
{
MyObject data1 = null;
MyObject data2 = null;
data1 = DoSomething(a,b,c);
data2 = DoSomething(a,b,c);
UnitOfWork.Save();
var isValidData1 = IsValid(data1);
var isValidData2 = IsValid(data2);
}
Все мои макеты работают, как ожидается, и DoSomething будет возвращать данные, как ожидается, и IsValid также будет работать, как и ожидалось.
Так что я могу использовать мою новую InTransactionas:
unitOfWork.Setup(uow => uow.InTransaction(It.IsAny<Action>());
будет работать правильно, но проблема в том, что остальная часть функции MyFunction
завершится ошибкой, так как IsValid
ожидает, что data1 и data2 будут установлены на что-то конкретное.
IЯ посмотрел на Callback, но я не думаю, что он подходит для этого. Я использую его в других модульных тестах, но они используются в функции, а не в методе void, где мне разрешено устанавливать параметры для различных объектов.
Любые идеи, как я могу вернуть данные из метода moq voidкоторый принимает параметр Action внутри тестируемой функции.
Спасибо.