gpt4 book ai didi

.net - 使用密封的具体类对第三方 API 进行单元测试

转载 作者:行者123 更新时间:2023-12-02 02:27:28 25 4
gpt4 key购买 nike

刚开始 TDD,一切顺利,直到我遇到这堵砖墙。

我正在围绕第三方 API 编写外观。 API 非常好,因为所有内容都可以通过接口(interface)访问,因此在测试我的外观时很容易模拟。

整个 API 是通过根接口(interface)访问的,并且有一个很深的接口(interface)层次结构,您可以从中向下钻取。在标准 IoC 实践中,我的外观在其构造函数中采用了这个根接口(interface)。

TDD 进展顺利,但在使用深层接口(interface)时模拟变得有点复杂,因为我必须模拟整个接口(interface)树,所以有点痛苦。不过没什么大不了的,我只是维护了一个构建模拟的辅助函数。不过,这确实让我怀疑我是否使用了正确的方法。

无论如何,在树的中途,我现在突然遇到了一个密封的具体类型,没有公共(public)构造函数,所以我无法 mock 它。这导致我的测试失败,因为模拟 API 总是为此成员返回 null。

我能看到的解决这个问题的唯一方法是为这种类型创建我自己的接口(interface),并在我的外观上有一个虚拟方法来访问它。但是,这对我来说似乎很麻烦,因为我无法通过这种方法强制访问该类型,而且很容易忘记。例如,很自然地使用:

ConcreteType c = SomeInterface.ConcreteMember;

代替:

IConcreteType c = GetConcreteMember(SomeInterface);

忘记这一点会导致测试失败。

我是否遗漏了一些基本的东西?正如我所说,我对单元测试非常陌生。

附言。我正在使用最小起订量。

最佳答案

使用moles .通过使用它,您可以为任何密封类型创建模拟(我自己,我最近使用它来提供来自 System.Web.HttpContext.Current 属性的模拟)。

如果您查看下载中的文档 (Microsoft Moles Reference Manual.docx),这应该会为您提供足够的信息以帮助您入门。

关于.net - 使用密封的具体类对第三方 API 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312664/

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