C# 所有Moq测试用例都没有检查任何逻辑就通过了吗?
我遵循这个教程 我没有实现一个逻辑来确定什么信用分数应该返回“可能”、“拒绝”但Moq测试通过所有单元测试C# 所有Moq测试用例都没有检查任何逻辑就通过了吗?,c#,unit-testing,moq,moq-3,C#,Unit Testing,Moq,Moq 3,我遵循这个教程 我没有实现一个逻辑来确定什么信用分数应该返回“可能”、“拒绝”但Moq测试通过所有单元测试 public interface ICreditDecisionService { string GetCreditDecision(int creditScore); } public class CreditDecision { ICreditDecisionService creditDecisionService; public CreditDecision(ICred
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{
字符串GetCreditDecision(int creditScore);
}
公共类信用决策{
ICreditDecisionService creditDecisionService;
公共信用决策(ICreditDecisionService creditDecisionService){
this.creditDecisionService=creditDecisionService;
}
公共字符串MakeCreditDecision(int creditScore){
返回creditDecisionService.GetCreditDecision(creditScore);
}
===================================
//测试班
[测试夹具]
公共类信用决策测试{
//依赖项的模拟实例
MockmockCreditDecisionService;
信用决策系统测试不足;
[测试案例(100,“拒绝”)]
[测试案例(549,“拒绝”)]
[测试用例(550,“可能”)]
[测试用例(674,“可能”)]
[TestCase(675,“我们期待与您开展业务!”)
public void MakeCreditDecision\u始终\u返回sexpectedresult(int creditScore,string expectedResult){
//安排
//创建和配置模拟
mockCreditDecisionService=新建Mock(MockBehavior.Strict);
mockCreditDecisionService.Setup(p=>p.GetCreditDecision(creditScore)).Returns(expectedResult);
systemUnderTest=新的CreditDecision(mockCreditDecisionService.Object);
var结果=systemUnderTest.MakeCreditDecision(creditScore);
Assert.That(result,Is.EqualTo(expectedResult));
mockCreditDecisionService.VerifyAll();
}
}
我没有
ICreditDecisionService
的实现,但是Moq测试通过了!您能解释一下这些代码的错误吗。据我所知,您的代码完全按照设计/编写的方式工作。您正在创建一个ICreditDecisionService
的模拟,并告诉它在每种情况下返回什么另一方面,est断言发生了两件事:
CreditDecision.MakeCreditDecision()
返回由ICreditDecisionService
生成的值(在本例中,模拟始终返回正确/已知的值)CreditDecision.MakeCreditDecision()
调用ICreditDecisionService.GetCreditDecision()
,调用的值为creditScore
CreditDecision
而不是ICreditDecisionService
。您不需要ICreditDecisionService
的实现来测试CreditDecision
;这就是模拟的来源。您将creditdecisionservice
与ICreditDecisionService
隔离开来,无论ac是什么为了只测试CreditDecision
,实际实现可能是
但是,我会更改测试名称以反映测试中真正发生的事情;也许像
MakeCreditDecision\u从\u服务返回\u结果\u这样的描述会更好。您的代码似乎没有任何问题。它的执行方式与您配置的运行方式相同。您不需要实现它这就是您使用模拟的原因。测试中的类CreditDecision
被注入模拟依赖项以测试MakeCreditDecision
方法。这似乎是一个。您试图实现的最终目标是什么?我试图理解为什么我们不需要if(creditScore)然后返回“Mabye”…
。除了了解Moq之外,我们不尝试实现任何目标。我们没有测试ICreditDecisionService
。这是有道理的。谢谢!