c# - 有没有更合适的方法来测试构造函数是否抛出异常?

标签 c# .net unit-testing xunit.net fluent-assertions

通常您会测试某个方法是否抛出异常,如下所示。 我使用 FluentAssertions:

[Fact]
public void Exception_gets_thrown()
{
    // Arrange
    var foo = new Foo("validArgument");

    // Act/Assert
    foo.Invoking(f => f.Bar(null))            // null is an invalid argument
       .ShouldThrow<ArgumentNullException>();
}

但是如果在构造函数中抛出异常,如何测试呢? 我就是这样做的,但是有没有更合适的方法 通过 FluentAssertions?

[Fact]
public void Constructor_throws_Exception()
{
    // Arrange
    Action a = () => new Foo(null);         // null is an invalid argument

    // Act/Assert
    a.ShouldThrow<ArgumentNullException>();
}

最佳答案

这正是您应该如何测试异常,这就是 ShouldThrow<T>()ShouldNotThrow<T>()是为摆在首位而设计的。事实上,Invoking()方法可能在下一个大版本 (2.0.0) 中被标记为过时。

关于c# - 有没有更合适的方法来测试构造函数是否抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900373/

相关文章:

c# - 如何将秒转换为时分秒?

unit-testing - 什么是模拟?

c# - 如何在日期中保留 0

c# - 尝试 COM,C# 默认使用 stdcall 还是必须指定

c# - 调试时使用 visual studio 命令运行实例方法

c# - 在 Azure 上使用 Excel

.net - 使用 mono 提高 .Net XML 序列化程序的性能

c - 使用硬编码内存地址主机测试 C 程序

Python 2.6 : proper usage of unittest. 测试套件

c# - 发送不带 DefaultRequestHeaders 的 HttpClient 请求