【问题标题】:Unit test with Moq使用 Moq 进行单元测试
【发布时间】:2011-12-24 23:35:19
【问题描述】:

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

【问题讨论】:

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

标签: asp.net-mvc-3 moq


【解决方案1】:

您的设置已为 GetState 方法完成,参数为 true。

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

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

只需像这样在断言语句中进行调用,它应该可以工作。

Assert.AreEqual(1, _service.GetStates(true).Count());           

【讨论】:

    【解决方案2】:

    我已经在我的一个解决方案中复制了您的代码,并且测试通过了。

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

    代码是否与您的解决方案中的完全一致?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 2012-06-01
      • 2023-03-29
      相关资源
      最近更新 更多