用Moq进行单元测试

时间:2011-11-09 03:03:30

标签: asp.net-mvc-3 moq

我正在使用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());           
}

2 个答案:

答案 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());           
    }

代码是否完全符合您的解决方案?