当我在调试模式下运行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中为空。
有什么想法吗?
答案 0 :(得分:0)
谢谢@LordWilmore
在测试类中使用构造函数是不常见的,并且正如您所建议的那样使用SetUp是正确的方法。不同之处在于,当你有一个构造函数时,该构造函数被调用一次,所以如果你在每次测试后没有明确地整理,那么任何先前测试的影响都会留下来。在每个[Test]方法之前调用[SetUp]方法,因此在这里初始化意味着您每次都在创建一个新实例。出于这个原因,我仍然建议在每个测试中根据需要创建项目,而不是作为类成员。 - LordWilmore