强制 NSubstitute 为每次调用抛出异常
Force NSubstitute to throw exceptions for every call
我正在使用 NSubsitute 模拟我的测试方法使用的 class。我想确保我的方法不会抛出由其依赖项引起的异常。
有没有办法强制 mock 抛出异常,无论它的哪个方法被调用?
我知道,如果调用特定方法,我可以 'prepare' 模拟抛出异常。但是接下来我还需要检查是否调用了这个准备好的方法,以防止其他人在不更改单元测试的情况下更改代码。但这也意味着开始测试我不想做的算法。
编辑: 因为我试图从 RestSharp 中模拟 IRestClient 我发现至少有一种方法可以为每个 return a Task 的调用抛出异常——这对我的用例来说已经足够了。也许我的问题不够具体,并且确实暗示了很多错误的解决方案。
var restClient = Substitute.For<IRestClient>();
restClient.ReturnsForAll<Task<IRestResponse>>(t => throw new Exception("something did go wrong with the web api call"));
NSubstitute 不支持此功能。
为此手动创建一个测试替身可能更容易。如果您使用的是 VS,它可以 generate a sub-type that defaults to all members throwing NotImplementedException. (R# and Rider 提供类似的选项。)
我正在使用 NSubsitute 模拟我的测试方法使用的 class。我想确保我的方法不会抛出由其依赖项引起的异常。
有没有办法强制 mock 抛出异常,无论它的哪个方法被调用?
我知道,如果调用特定方法,我可以 'prepare' 模拟抛出异常。但是接下来我还需要检查是否调用了这个准备好的方法,以防止其他人在不更改单元测试的情况下更改代码。但这也意味着开始测试我不想做的算法。
编辑: 因为我试图从 RestSharp 中模拟 IRestClient 我发现至少有一种方法可以为每个 return a Task
var restClient = Substitute.For<IRestClient>();
restClient.ReturnsForAll<Task<IRestResponse>>(t => throw new Exception("something did go wrong with the web api call"));
NSubstitute 不支持此功能。
为此手动创建一个测试替身可能更容易。如果您使用的是 VS,它可以 generate a sub-type that defaults to all members throwing NotImplementedException. (R# and Rider 提供类似的选项。)