我正在使用Moq进行单元测试,我正在尝试编写我的第一个单元测试。我的图层是“Controller => Service => Repository”。
(我正在使用统一和存储库模式。)
每当我运行单元测试时,实际值始终为0
,如_service.GetEquipStates().Count() = 0
。我不知道我在哪里做错了。请建议。
我的单元测试代码如下:
private ITestService _service;
private Mock<ITestRepository> RepositoryMoc;
[TestInitialize]
public void Initialize() {
RepositoryMoc= new Mock<ITestRepository>();
_service = new TestService(RepositoryMoc.Object)
}
[TestMethod]
public void GetEquipmentState() {
var stateList = new[] { new State { ID = 1, Desc= "test" } };
RepositoryMoc.Setup(es => es.GetStates(true)).Returns(stateList );
Assert.AreEqual(1, _service.GetStates().Count());
}
答案 0 :(得分:1)
您的设置是使用参数true的方法GetState完成的。
RepositoryMoc.Setup(es => es.GetStates(true)).Returns(stateList);
但是你在Assert-Statement中的调用是针对没有参数的GetState方法。是使用默认参数声明方法GetState还是必须使用函数(一个带有bool参数,一个没有)?
只需在这样的断言语句中进行调用,它就可以正常工作。
Assert.AreEqual(1, _service.GetStates(true).Count());
答案 1 :(得分:1)
我已经在我的一个解决方案中复制了您的代码,测试通过正常。
private Mock<IAccessor> RepositoryMoc;
private Controller _service;
[TestMethod]
public void TestMethod()
{
// Arrange
_service = new Controller();
RepositoryMoc = new Mock<IAccessor>();
_service.Accessor = RepositoryMoc.Object;
var stateList = new[] { new State { ID = 1, Desc = "test" } };
RepositoryMoc.Setup(es => es.GetStates(true)).Returns(stateList);
// Act & Assert
Assert.AreEqual(1, _service.GetStates().Count());
}
代码是否完全符合您的解决方案?