【发布时间】:2017-10-31 01:02:10
【问题描述】:
我正在关注这个intro to unit testing 教程。
我没有实现逻辑来确定应该返回“可能”、“拒绝”的信用评分,但 Moq 测试通过了所有单元测试。
public interface ICreditDecisionService {
string GetCreditDecision(int creditScore);
}
public class CreditDecision {
ICreditDecisionService creditDecisionService;
public CreditDecision(ICreditDecisionService creditDecisionService) {
this.creditDecisionService = creditDecisionService;
}
public string MakeCreditDecision(int creditScore) {
return creditDecisionService.GetCreditDecision(creditScore);
}
===================================
// Testing Class
[TestFixture]
public class CreditDecisionTests {
//mock instance for dependency
Mock < ICreditDecisionService > mockCreditDecisionService;
CreditDecision systemUnderTest;
[TestCase(100, "Declined")]
[TestCase(549, "Declined")]
[TestCase(550, "Maybe")]
[TestCase(674, "Maybe")]
[TestCase(675, "We look forward to doing business with you!")]
public void MakeCreditDecision_Always_ReturnsExpectedResult(int creditScore, string expectedResult) {
//Arrange
//creating and configuring the mock
mockCreditDecisionService = new Mock < ICreditDecisionService > (MockBehavior.Strict);
mockCreditDecisionService.Setup(p => p.GetCreditDecision(creditScore)).Returns(expectedResult);
systemUnderTest = new CreditDecision(mockCreditDecisionService.Object);
var result = systemUnderTest.MakeCreditDecision(creditScore);
Assert.That(result, Is.EqualTo(expectedResult));
mockCreditDecisionService.VerifyAll();
}
}
我没有实现ICreditDecisionService,但Moq测试通过了!你能解释一下这些代码有什么问题吗?
【问题讨论】:
-
您的代码似乎没有任何问题。它正在执行,就像您将其配置为运行一样。您不需要实现,这就是您使用模拟的原因。被测类
CreditDecision被注入一个模拟依赖项来测试MakeCreditDecision方法。 -
这似乎是XY problem。您要达到的最终目标是什么?
-
我试图理解为什么我们不需要
if(creditScore) then return "Mabye" .....。除了了解起订量之外,不要试图实现任何目标。
标签: c# unit-testing moq moq-3