gpt4 book ai didi

.net - 当需要进行模拟和单元测试时,如何抛出 SqlException?

转载 作者:行者123 更新时间:2023-12-03 03:43:07 25 4
gpt4 key购买 nike

我正在尝试测试项目中的一些异常,我捕获的异常之一是SQlException

看来你不能去 new SqlException() 所以我不确定如何抛出异常,特别是在不以某种方式调用数据库的情况下(并且由于这些是单元测试,因此通常建议不要调用数据库,因为它很慢)。

我正在使用 NUnit 和 Moq,但我不知道如何伪造它。

回应一些似乎全部基于 ADO.NET 的答案,请注意,我正在使用 Linq to Sql。所以这些事情就像在幕后。

根据 @MattHamilton 的要求提供更多信息:

System.ArgumentException : Type to mock must be an interface or an abstract or non-sealed class.       
at Moq.Mock`1.CheckParameters()
at Moq.Mock`1..ctor(MockBehavior behavior, Object[] args)
at Moq.Mock`1..ctor(MockBehavior behavior)
at Moq.Mock`1..ctor()

尝试模型时发布到第一行

 var ex = new Mock<System.Data.SqlClient.SqlException>();
ex.SetupGet(e => e.Message).Returns("Exception message");

最佳答案

我有一个解决方案。我不确定这是天才还是疯子。

以下代码将创建一个新的 SqlException:

public SqlException MakeSqlException() {
SqlException exception = null;
try {
SqlConnection conn = new SqlConnection(@"Data Source=.;Database=GUARANTEED_TO_FAIL;Connection Timeout=1");
conn.Open();
} catch(SqlException ex) {
exception = ex;
}
return(exception);
}

然后您可以像这样使用(本示例使用 Moq)

mockSqlDataStore
.Setup(x => x.ChangePassword(userId, It.IsAny<string>()))
.Throws(MakeSqlException());

以便您可以在存储库、处理程序和 Controller 中测试 SqlException 错误处理。

现在我需要去躺下。

关于.net - 当需要进行模拟和单元测试时,如何抛出 SqlException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386962/

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