[英]Moq test passes even when verifying both Times.Once() and Times.Never() on same method call
我正在使用Xunit
在我的CarController
上测试Create
方法,我正在使用Moq
来模拟我的CarRepository
。
然后我使用mockCarRepository.Verify(m => m.Create(It.IsAny<Car>()), Times.Once());
检查是否正在调用我的存储库上的Create
方法。 然而,无论我是否打电话,测试都会通过。
这是一个完整的示例,我验证both that Create is called once AND that it is called never
。 当我预料到失败时,我的测试通过了。
using System;
using Moq;
using Xunit;
namespace Test
{
public class CarTest
{
[Fact()]
public async void CreateTest()
{
var mockCarRepository = new Mock<CarRepository>();
var carController = new CarController(mockCarRepository.Object);
carController.Create(new Car
{
Make = "Aston Martin",
Model = "DB5"
});
mockCarRepository.Verify(m => m.Create(It.IsAny<Car>()), Times.Once());
mockCarRepository.Verify(m => m.Create(It.IsAny<Car>()), Times.Never());
}
}
public class CarController
{
private readonly CarRepository _repo;
public CarController(CarRepository repo)
{
_repo = repo;
}
public void Create(Car car)
{
_repo.Create(car);
}
}
public class Car
{
public virtual String Make { get; set; }
public virtual String Model { get; set; }
}
public class CarRepository
{
public virtual void Create(Car car)
{
// DO SOMETHING
}
}
}
当我调试测试时,虽然它仍然通过,但我注意到抛出了以下异常:
A first chance exception of type 'Moq.MockException' occurred in Moq.dll
Additional information:
Expected invocation on the mock should never have been performed, but was 1 times: m => m.Create(It.IsAny<Car>())
No setups configured.
Performed invocations:
CarRepository.Create(Test.Car)
我正在调用Create
一次并验证Times.Never()
但我希望我的测试失败。 我需要做什么才能实现这一目标?
更新事实证明问题是我将我的测试标记为async
- 删除导致它通过。 但是我写的实际代码会调用async
方法,所以现在我的问题是,如何在使用异步方法时验证方法是否被调用?
事实证明,问题是我的测试方法被标记为async
删除,导致它按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.