未处于调试模式时,Nunit测试失败

时间:2018-03-05 13:36:25

标签: c# nunit moq

当我在调试模式下运行TEST时,它可以工作,否则会失败。

我正在使用Moq

添加以下行时,一切正常。

_repositoryMock.Setup(m => m.GetSingleBy(It.IsAny<Expression<Func<Configuration, bool>>>())).Returns((Configuration)null);

如果没有上面的那一行,它只能在DEBUG模式下工作。

[Test]
public void ChangeServiceTier() {
 //Arrange
 const int configurationId = 6;
 const int serviceTierId = 12;

 //Act
 var result = _configurationService.ChangeServiceTier(configurationId, serviceTierId);

 //Assert
 result.Should().BeNull();

}

方法

 public ConfigurationDto ChangeServiceTier(int id, int serviceTierId) {
  var cfg = _repository.GetSingleBy < Configuration > (s => s.Id == id);

  if (cfg == null) {
   return null;
  }
  return _mapper.Map < ConfigurationDto > (cfg);
 }

测试失败rason: Message: Expected result to be <null>, but found ConfigurationDto...

由于某种原因,cfg仅在调试MODE中为空。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

谢谢@LordWilmore

在测试类中使用构造函数是不常见的,并且正如您所建议的那样使用SetUp是正确的方法。不同之处在于,当你有一个构造函数时,该构造函数被调用一次,所以如果你在每次测试后没有明确地整理,那么任何先前测试的影响都会留下来。在每个[Test]方法之前调用[SetUp]方法,因此在这里初始化意味着您每次都在创建一个新实例。出于这个原因,我仍然建议在每个测试中根据需要创建项目,而不是作为类成员。 - LordWilmore