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
C# 如何用最小起订量测试空隙法?_C#_Unit Testing_Moq - Fatal编程技术网

C# 如何用最小起订量测试空隙法?

C# 如何用最小起订量测试空隙法?,c#,unit-testing,moq,C#,Unit Testing,Moq,我是TDD的新手,我还有很多问题,其中一个问题是如何测试void方法 我有一个参数通过refreference传递,我不知道如何测试:(这只是一个测试,不是我真正的方法) 有人能帮忙吗?谢谢 使用包含这两个属性的对象。这将使你的设计更干净,你的工作更干净 编辑:如果你真的想使用moq out参数,你可以找到一个例子,使用一个包含这两个属性的对象。这将使你的设计更干净,你的工作更干净 编辑:如果您真的想使用moq out参数,您可以找到一个示例假设userDAO作为依赖项注入,并且可以模拟,我将执

我是TDD的新手,我还有很多问题,其中一个问题是如何测试void方法

我有一个参数通过refreference传递,我不知道如何测试:(这只是一个测试,不是我真正的方法)

有人能帮忙吗?谢谢

使用包含这两个属性的对象。这将使你的设计更干净,你的工作更干净

编辑:如果你真的想使用moq out参数,你可以找到一个例子,使用一个包含这两个属性的对象。这将使你的设计更干净,你的工作更干净


编辑:如果您真的想使用moq out参数,您可以找到一个示例

假设
userDAO
作为依赖项注入,并且可以模拟,我将执行以下测试:

  • 在mocked
    userDAO上调用了Assert
    GetSomething()
  • 断言返回的引用字符串
    cod
    ==传入的User.cod 用于创建模拟的
    userDAO
  • 断言返回的引用字符串
    name
    ==传入的User.Cod 我们过去常常创建mock
    userDAO

  • 不过,我同意避免使用ref参数,我建议按照@Tim Cools在另一个答案中的建议进行重构,假设
    userDAO
    作为依赖项注入,并且可以模拟,我将进行以下测试:

  • 在mocked
    userDAO上调用了Assert
    GetSomething()
  • 断言返回的引用字符串
    cod
    ==传入的User.cod 用于创建模拟的
    userDAO
  • 断言返回的引用字符串
    name
    ==传入的User.Cod 我们过去常常创建mock
    userDAO

  • 不过,我同意避免使用ref参数,我建议按照@Tim Cools在另一个答案中的建议进行重构,只需在调用方法后测试参数中的值,模拟userDAO来控制它返回的值(null、cod、name)

    在调用方法后测试参数中的值,模拟userDAO来控制它返回的内容(null、cod、name)

    一个void方法意味着会有某种副作用。如果可能的话,我通常建议避免使用它们,但当您确实需要测试一个时,一般的经验法则是:

  • 断言对您的模拟进行了所有预期调用
  • 如果可能,断言mock是使用特定参数值调用的。这对于void方法更为重要,因为您正在测试副作用
  • 坚持你能坚持的每一个副作用,包括那些不应该改变的副作用

  • 实际上,这些断言也应该针对非void方法,也许更多的是为了防止意外的副作用,而不是测试预期的副作用。(依我看,如果可能的话,函数应该没有副作用。)

    无效方法意味着会有某种副作用。如果可能的话,我通常建议避免使用它们,但当您确实需要测试一个时,一般的经验法则是:

  • 断言对您的模拟进行了所有预期调用
  • 如果可能,断言mock是使用特定参数值调用的。这对于void方法更为重要,因为您正在测试副作用
  • 坚持你能坚持的每一个副作用,包括那些不应该改变的副作用

  • 实际上,这些断言也应该针对非void方法,也许更多的是为了防止意外的副作用,而不是测试预期的副作用。(在我看来,如果可能的话,一个函数应该没有副作用。)

    我现在还不太清楚这个概念。。在我的测试中,我如何模拟我方法中的dao?我将如何模拟在方法中使用的结果?因为我不能从情妇身边经过,他不是他们中的一员!对不起,我还是很傻!您可以将模拟的
    userDAO
    作为构造函数参数传递给包含
    ReplaceCenter
    方法的类。我现在不太清楚这个概念。。在我的测试中,我如何模拟我方法中的dao?我将如何模拟在方法中使用的结果?因为我不能从情妇身边经过,他不是他们中的一员!对不起,我还是很傻!您可以将模拟的
    userDAO
    作为构造函数参数传递给包含
    ReplaceCenter
    方法的类,如果它们没有通过refreference传递?我还能这样做吗?如果你没有通过引用传递它们,你会返回什么吗?如果是这样,请根据返回值进行测试,如果返回值仅对其他对象起作用,则测试这些依赖项是否使用正确的参数调用,以及它们是否未通过引用传递?我还能这样做吗?如果你没有通过引用传递它们,你会返回什么吗?如果是这样,请根据返回值进行测试,如果返回值仅对其他对象起作用,则测试是否使用正确的参数调用了这些依赖项
    public void ReplaceCenter(ref string cod, ref string name)
        {
            User user = userDAO.GetSomething();
    
            if (user.Cod != null)
            {
                cod = user.Cod;
            }
    
            if (user.Name != null)
            {
                name = user.Name;
            }
        }