【问题标题】:Can someone tell me how to fix this error on C#有人可以告诉我如何在 C# 上修复此错误
【发布时间】:2017-09-07 19:04:42
【问题描述】:

我是 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&lt;ArgumentException&gt;(test.EmptyValue(null)) test.EmptyValue(null) 是带下划线的文本。老实说,我不知道是什么问题。我知道我做错了什么,但我只是不知道是什么。我不知道这是否会改变任何东西,但我以前从未为异常编写过单元测试。

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

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

    你必须改变这个

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

    通过这个

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

    【讨论】:

    • 非常感谢您。您能否向我解释一下它现在是如何以及为什么起作用的?
    • 在您的代码中,您将EmpyValue 的返回值传递给您的Assert 方法,即string。但是Assert 需要一个Action 委托(方法调用)作为参数,这是这个 lambda 表达式创建的。更多信息,请点击herehere
    • Assert.ThrowsException<...> 需要一个“Action”委托(不返回结果)。您的“EmptyValue”方法与“Action”不兼容,因为它返回一个字符串。通过将方法调用封装在丢弃返回类型的 lambda 表达式中,您实际上是在将“Action”传递给 Assert 方法。
    • @jAC:Johan 提供了一些额外的信息,如果还不清楚,请告诉我。
    【解决方案2】:

    Assert.Throws 返回抛出的异常,让您可以断言异常

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

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

    你必须这样写

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

    所以你的情况

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

    【讨论】:

    • 如果您认为我有帮助,请接受我的回答或投票,或两者兼而有之
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多