2011-11-09 216 views
1

我正在使用Moq进行单元测试,并且正在尝试编写我的第一个单元测试。我的图层是“Controller => Service => Repository”。使用Moq进行单元测试

(我用的团结和存储库模式。)

每当我跑我的单元测试,实际值始终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());   
} 
+3

请同时发布'TestService.GetStates()'的代码。 –

回答

1

你的设置是为梅索德GETSTATE与prameter真正完成。

RepositoryMoc.Setup(es => es.GetStates(true)).Returns(stateList); 

但是,您在Assert-Statement中的调用是针对不带参数的方法GetState。方法GetState是使用默认参数声明还是必须使用函数(一个使用bool参数,另一个不使用)?

只要在assert-statement中这样调用它就可以了。

Assert.AreEqual(1, _service.GetStates(true).Count());   
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());   
    } 

代码是否与解决方案中的代码完全相同?