Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 所有Moq测试用例都没有检查任何逻辑就通过了吗?_C#_Unit Testing_Moq_Moq 3 - Fatal编程技术网

C# 所有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

我遵循这个教程

我没有实现一个逻辑来确定什么信用分数应该返回“可能”、“拒绝”但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{
字符串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
    。这是有道理的。谢谢!