【问题标题】:How to unit test integer parameters by passing string value in nunit?如何通过在 nunit 中传递字符串值来对整数参数进行单元测试?
【发布时间】:2018-04-21 02:40:40
【问题描述】:

说,在 C# 控制台应用程序中,有一个简单的函数,如下所示-

    public int MaxValue(int? i1, int? i2)
    {
      if (i1>=i2)
          return i1;
      else
          return i2;
    }

如果字符串作为参数传递,我想从 Maxvalue() 抛出异常;单元测试功能如下-

    [Test]
    public void test1()
    {
      Assert.Throws<ArgumentException>(()=> ob.MaxValue("A", "B"));
    }

但是将字符串作为参数传递给 MaxValue() 来代替整数是不可能的。那么,我该如何测试呢?

【问题讨论】:

  • string 不能作为 int? 参数传递。您的问题应该是'如何对无法编译的代码进行单元测试?'
  • @SergeyBerezovskiy 没有。用户是否输入错误是我的测试用例之一。该示例只是为了简单起见。我想阻止用户这样做并测试代码。
  • @JabinTonni 所以展示你的情况。单元测试应该测试功能。在您的代码中,您无法从“A”生成 int,因此代码无法将“A”转换为 int。
  • @JabinTonni 没有。这个例子不是为了简单。这是一个误导性的例子
  • @SergeyBerezovskiy,我花了一段时间才理解您的建议“我如何对不编译的代码进行单元测试”。我找到了关于使用反射的建议。我在单元测试中只有一天大,所以请原谅我的例子。非常感谢您的建议。我将参数写为“int?”因为我的其他测试用例之一是将空值传递给函数。但我的理解是我不应该尝试修改代码来运行我的测试。如果你建议我一个更简单的反射教程,那就太好了。

标签: c# unit-testing exception nunit


【解决方案1】:

C# 是强类型语言,因此编译器会检查所有函数参数的正确类型。无法将字符串作为 int 参数传递。这个测试在编译时为你做 c# 编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多