gpt4 book ai didi

c# - 我应该模拟框架类吗

转载 作者:行者123 更新时间:2023-11-28 20:57:52 25 4
gpt4 key购买 nike

我正在使用 C# 和 .NET Framework 4 编写一个全新的项目,由于我的上一个应用程序缺乏测试并且不是一个非常可测试的设计,我决心这次避免犯同样的错误。

我已经为注入(inject)类的接口(interface)中的每个类获得了外部依赖性,现在我正在编写具体的实现。虽然我不打算开始编写单元测试来测试框架中的代码,但我担心如果调用框架类的方式存在错误,那么我将无法测试它。作为一个非常简单的示例,假设我正在使用 SQLCommand(我实际上使用的是 EF 4.1,但这只是一个示例)并且我忘记了在命令上设置连接属性。我的想法是,如果我模拟出某些框架类,我可以通过模拟来测试这些约定并避免潜在的错误来源。这样做也意味着我模拟了框架类中的某些异常,这些异常很难测试但确实会发生,例如UnauthorizedAccessException、OutOfMemoryException 等

我意识到,当我尝试运行代码来测试它时,代码可能会崩溃,但我的脑海深处有一些东西告诉我,我仍然有可能错过一些东西,只有在产品发布后才能发现它在外地。这样做是否有任何理由,或者这是一个相当严重的 YAGNI 案例?

最佳答案

创建注入(inject)接口(interface)的具体模拟太过分了。您不需要模拟整个框架。但是,您应该检查代码路径并确保正确处理异常和无效输入。

大多数模拟框架(如 Rhino Mocks)允许您模拟从注入(inject)的模拟对象中抛出异常。

[Test]
public void testThrowsExceptions()
{
// Arrange
var dependency1 = MockRepository.Mock<IMockFrameworkObject1>();
var dependency2 = MockRepository.Mock<IMockFrameworkObject2>();

dependency2.Expect(d2 => d2.SomeAction).Throws(new someexception);

var myObject = new ConcreteObject(dependency1, dependency2);

// Act
myObject.SomeAction();

// Assert
}

关于c# - 我应该模拟框架类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6870682/

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