gpt4 book ai didi

c# - 为私有(private)方法断言异常

转载 作者:行者123 更新时间:2023-11-30 19:45:25 25 4
gpt4 key购买 nike

我正在使用 NUnit 在 C# 中对私有(private)方法进行单元测试。

例如,我的方法(如果是公共(public)的)预计会抛出一个 ArgumentNullException .我可以断言该方法抛出一个 ArgumentNullException像这样:Assert.Throws<ArgumentNullException>(() => method.Call());

但是,由于我正在使用反射调用私有(private)方法,所以我会断言 TargetInvocationException对于抛出 ArgumentNullException 的方法像这样:Assert.Throws<TargetInvocationException>(() => methodInfo.Invoke(obj, new object[] { params }));

我想声明一个 ArgumentNullException而不是 TargetInvocationException对于那个私有(private)方法,所以我可以扫描它的代码并知道它期望做什么,而不是通过调试来找出答案。

我将如何断言实际异常,而不是 TargetInvocationException

注意:这个问题没有解决单元测试公共(public)方法与私有(private)方法背后的理论。我和我的团队已经决定对私有(private)方法进行单元测试,这是否是单元测试的方式与这个问题无关。查看 this 上投票最多的答案问题以了解我们的理由。

最佳答案

找到我的答案:

var exception = Assert.Throws<TargetInvocationException>(() => methodInfo.Invoke(obj, new object[] { params }));
Assert.IsInstanceOf<Exception>(exception.InnerException);

更新

Assert.IsNotNull(exception.InnerException)让我知道存在内部异常。 Assert.IsInstanceOf<Exception>(exception.InnerException);将断言任何类型的 Exception抛出。我同意这两种方式都告诉我们存在内部异常。

但是.....如果我想断言特定类型的内部异常怎么办?

例如,如果我的方法抛出 ArgumentNullException , 那么我不能通过做 Assert.IsInstanceOf<FileNotFoundException>(exception.InnerException); 来断言使用 Assert.IsNotNull让我知道存在内部异常,但它不会揭示内部异常的类型。因此,这就是为什么我更喜欢使用 IsInstanceOf 的原因在这种情况下。

关于c# - 为私有(private)方法断言异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com