Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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/5/ruby/23.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_Nunit - Fatal编程技术网

C# 当只有一个参数与测试有关时,如何测试功能参数?

C# 当只有一个参数与测试有关时,如何测试功能参数?,c#,unit-testing,nunit,C#,Unit Testing,Nunit,我写了以下测试: [TestCase(null, 0, 0, null, null, ExpectedException = typeof(ArgumentNullException), TestName = "VerifyThat_WhenBeginWriteHasANullBuffer_AnArgumentNullExceptionIsThrown")] [TestCase(new byte[] {1,2,3}, -1, 0, null, null, ExpectedException =

我写了以下测试:

[TestCase(null, 0, 0, null, null, ExpectedException = typeof(ArgumentNullException), TestName = "VerifyThat_WhenBeginWriteHasANullBuffer_AnArgumentNullExceptionIsThrown")]
[TestCase(new byte[] {1,2,3}, -1, 0, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasANegativeSizeParameter_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 4, 0, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasASizeParameterThatIsBiggerThanTheBufferSizeAndTheOffsetIsZero_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 5, 1, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasASizeParameterThatIsBiggerThanTheBufferSizeMinusTheOffset_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 2, -1, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasANegativeOffsetParameter_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 2, 5, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasAnOffsetParameterThatIsBiggerThanTheBufferSize_AnArgumentOutOfRangeExceptionIsThrown")]
public void VerifyThat_WhenBeginWritesGivenWrongParameters_AnExceptionIsThrown(byte[] buffer, int offset, int size, AsyncCallback callback, object state)
{
    connectedStream.BeginWrite(buffer, offset, size, callback, state);
}
我当前正在使用无效参数和随机有效参数调用BeginWrite函数。
我在这里做的对吗?是否有更好的方法提供有效参数

编辑:

在这种情况下,测试参数的有效性取决于有效参数。
例如,当偏移量为负值或大于缓冲区大小减去偏移量时,偏移量无效。对于偏移量大于缓冲区大小减去偏移量或负值的情况,测试通过这一事实并不能证明该方法总是抛出ArgumentOutOfRangeException。我总是会错过一些东西。
检查多个输入总比只检查一次好。
有没有一种方法可以自动完成

编辑2:
这可能是我的解决方案吗

编辑3:

没有silverlight端口。

如果要测试对无效参数的反应,应使所有其他参数都有效,以避免在不同参数导致失败时出现误报

至于如何提供这些有效的参数,就像你在其他情况下所做的那样,你并不真正关心这个值是什么,只是使用一些有效的方法


您正在测试当您向该方法提供一个特定的无效参数时,该方法是否会抛出,而所有其他参数都是有效的。只要其他参数符合您对valid的定义,您就是在测试正确的东西,所以不要太担心如何获取值。

如果您想测试对无效参数的反应,您应该使所有其他参数都有效,以避免在不同参数导致失败时出现误报

至于如何提供这些有效的参数,就像你在其他情况下所做的那样,你并不真正关心这个值是什么,只是使用一些有效的方法


您正在测试当您向该方法提供一个特定的无效参数时,该方法是否会抛出,而所有其他参数都是有效的。只要其他参数符合您对valid的定义,您就在测试正确的东西,所以不要太担心如何获取值。

技术部分。

NUnit 2.5有一些新的属性来帮助自动生成测试用例:

  • -使用参数范围内指定的所有数值生成多个测试用例
  • -类似于
    范围
    ,您可以指定单个值的列表,而不是数字范围
  • -指定一个函数以生成
    值列表
  • -指定用于生成测试用例列表的函数。每一个细节都可以定制
范围
值源
适用于单个参数。每个参数都可以使用自己的值属性

用于
ValueSource
TestCaseSource
的函数调用得很早,可能在
TestFixtureSetUp
之前。有关用法,请参阅文档

示例。

  • 字节数组
    buffer
    可以使用指定缓冲区大小的
    ValueSource
    函数,这样您就可以尝试更大的数组而无需太多键入
  • 对于给定的
    缓冲区
    大小
    的有效范围是从1到缓冲区大小的任意范围
  • 对于给定的
    缓冲区
    大小
    偏移量
    的有效范围是从零到大小减去大小(我把这个留给你;它是一个连续的范围)
  • 其他任何东西都超出范围
旁注。上述四个条件加在一起成为一个条件,它直接支持测试理论。当使用理论时,您可以编写一次测试用例函数,并涵盖好参数和坏参数


测试原理部分。

  • 当您知道多种测试方法(或标准)时,请始终采用所有方法,并在每种方法中尝试一组合理的测试用例
  • 使用自动化的测试用例生成为您带来最大的好处
  • 如果无法访问(被测软件的)源代码并了解我们的测试代码覆盖率,我们无法确定是否遗漏了某些内容。这就是为什么如果需要一定程度的保证,白盒测试是必要的

    • 技术部分。

      NUnit 2.5有一些新的属性来帮助自动生成测试用例:

      • -使用参数范围内指定的所有数值生成多个测试用例
      • -类似于
        范围
        ,您可以指定单个值的列表,而不是数字范围
      • -指定一个函数以生成
        值列表
      • -指定用于生成测试用例列表的函数。每一个细节都可以定制
      范围
      值源
      适用于单个参数。每个参数都可以使用自己的值属性

      用于
      ValueSource
      TestCaseSource
      的函数调用得很早,可能在
      TestFixtureSetUp
      之前。有关用法,请参阅文档

      示例。

      • 字节数组
        buffer
        可以使用指定缓冲区大小的
        ValueSource
        函数,这样您就可以尝试更大的数组而无需太多键入
      • 对于给定的
        缓冲区
        大小
        的有效范围是从1到缓冲区大小的任意范围
      • 对于给定的
        缓冲区
        大小
        偏移量
        的有效范围是从零到大小减去大小(我把这个留给你;它是一个连续的范围)
      • 其他任何东西都超出范围
      旁注