Вопрос, который я хотел бы задать, заключается в том, что это действительно модульный тест?В модульном тесте будут рассматриваться макеты Table<TEntity>
экземпляров, потому что нас не интересуют реальные данные, скорее, механизм создания элементов корректен.
В приведенном выше фрагменте кода вы, похоже, проводите модульное тестирование самих методов Linq, а не какого-либо конкретного кода, который вы написали сами.
Что касается вашего последнего вопроса, одна из фундаментальных ошибок сделанас насмешкой является предположение что проверить при издевательстве.Как правило, вы будете издеваться над тем, что потребляет тот тип, который вы хотите проверить.Например:
public ICalculatorService
{
int Add(int a, int b);
}
[Test]
public void CannAdd()
{
var mock = Mock<ICalculatorService();
mock.Setup(m => m.Add(It.IsAny<int>(), It.IsAny<int>()))
.Returns(100);
var service = mock.Object;
Assert(service.Add(1, 2) == 100); // Incorrect
}
Вышеприведенный тест является бессмысленным, потому что я проверяю, что он возвращает именно то, что я ему сказал.Я не тестирую здесь среду Moq, мне нужно тестировать свой код, поэтому мне нужно протестировать потребителя:
public class Calculator
{
private readonly ICalculatorService _service;
public Calculator(ICalculatorService service)
{
_service = service;
}
public int Add(int a, int b)
{
return _service.Add(a, b);
}
}
[Test]
public void CannAdd()
{
var mock = Mock<ICalculatorService();
mock.Setup(m => m.Add(It.IsAny<int>(), It.IsAny<int>()))
.Returns(100);
var calculator = new Calculator(mock.Object);
Assert(calculator.Add(1, 2) == 100); // Correct
}
Это больше похоже на это (хотя и упрощенный пример).Сейчас я тестирую самого потребителя Calculator
, а не расходного материала.В вашем примере, даже если бы вы издевались над своим DataContext, чтобы он возвращал фиктивные экземпляры Table<TEntity>
, какие реальные преимущества вы получаете?
Реально вы, вероятно, создали бы репозиторий, например, IInventoryRepository
, и создали быпотребитель этого хранилища (это может быть модель домена, контроллер и т. д.).Затем, выполнив тестирование, вы смоделируете этот репозиторий и протестируете своего потребителя.