我有以下代码来测试,当将特定名称传递给我的方法时,它会引发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/