我有以下代码来测试,当将特定名称传递给我的方法时,它会引发SQL异常(尽管听起来有些奇怪,但有一个原因)。

   mockAccountDAL.Setup(m => m.CreateAccount(It.IsAny<string>(),
"Display Name 2", It.IsAny<string>())).Throws<SqlException>();

但是,由于SqlException的构造函数是内部的,因此无法编译:



现在,我可以将其更改为声明它应该抛出Exception,但这对我不起作用,因为如果我的方法是SqlException,则我的方法应该返回一个状态码,如果是其他异常,则应返回另一个状态码。那就是我的单元测试所测试的。

有什么方法可以实现而不改变我正在测试的方法的逻辑,还是不测试这种情况?

最佳答案

这应该工作:

using System.Runtime.Serialization;

var exception = FormatterServices.GetUninitializedObject(typeof(SqlException))
                as SqlException;

mockAccountDAL.Setup(m => m.CreateAccount(It.IsAny<string>(), "Display Name 2",
                     It.IsAny<string>())).Throws(exception);

但是,使用GetUninitializedObject有以下警告:



如果这引起任何问题,则可以使用更多涉及反射的魔术来创建它,但是这种方法可能是最简单的(如果可行)。

关于c# - 最小起订量并引发SqlException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11976996/

10-12 02:10