我是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)
是带下划线的文本。我老实说不知道是什么问题。我知道我做错了什么,但我不知道是什么。我不知道这是否会改变,但我之前从未为异常编写过单元测试。
答案 0 :(得分:4)
您将EmptyValue
(string
)的结果传递给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));