有人能告诉我如何在C#上修复此错误

时间:2017-09-07 19:04:43

标签: c# unit-testing

我是C#的初学者,我收到此错误Argument 1: Cannot convert from 'string' to 'System.Action'。老实说,我不知道如何解决这个问题。如果你可以帮助我,请告诉我应该添加到我的代码中以修复此错误。我基本上编写了一个单元测试,它将测试代码是否正常工作(代码应该抛出异常)。这是我的代码:

单元测试项目文件:

[TestMethod]
    public void ExceptionTest()
    {
        var test = new JumpingCode();
        Assert.ThrowsException<ArgumentException>(test.EmptyValue(null));
    }

班级档案:

namespace Jumping
{
    public class JumpingCode
    {
      public string EmptyValue(string some)
      {
          if (string.IsNullOrEmpty(some))
          {
            throw new ArgumentException("Name Cannot be null or empty");
          }

          return "Hello World";
      }

   }
}

我基本上是在测试随机投掷。单元测试文件是抛出错误消息的文件。错误消息位于此行Assert.ThrowsException<ArgumentException>(test.EmptyValue(null)) test.EmptyValue(null)是带下划线的文本。我老实说不知道是什么问题。我知道我做错了什么,但我不知道是什么。我不知道这是否会改变,但我之前从未为异常编写过单元测试。

2 个答案:

答案 0 :(得分:4)

您将EmptyValuestring)的结果传递给Assert.ThrowsException,但此方法需要验证Action

你必须改变这个

Assert.ThrowsException<ArgumentException>(test.EmptyValue(null));

由此

Assert.ThrowsException<ArgumentException>(() => test.EmptyValue(null));

答案 1 :(得分:0)

Assert.Throws返回抛出的异常,它允许你在异常

上断言

因此,如果没有抛出异常,或者抛出了错误类型的异常,则第一个Assert Throws断言将失败。

但是如果抛出了正确类型的异常,那么现在可以断言你已经保存在变量中的实际异常。

你必须像这样写

var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));

所以在你的情况下

var ext = Assert.ThrowsException<ArgumentException>(() =>test.EmptyValue(null));