- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
刚开始 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/
当数据类扩展包含非抽象 open val 属性的密封类时,生成的子数据类包含与父类的私有(private)字段重复的私有(private)字段。 sealed class Foo(open val f
当封装一个.jar 文件(整个.jar,而不是特定的包)时,实际上封装了哪些包?它只是包含.class 文件的包,还是还包含父包和子包? 举个例子,假设我有一个包含单个 .class 文件 com.c
我可以很容易地为这样的密封案例类族一般派生一个编解码器: import io.circe._ import io.circe.generic.auto._ sealed trait Base case
我有一个类层次结构: class C1 { virtual object M1(); } class C2: C1 { override sealed object M1(); } class C3:
有什么区别: type MovieType = {| +blob?: string, +name: string, +url?: string |}; 和 type MovieType =
想象一个这样的 secret : apiVersion: v1 kind: Secret metadata: name: {{ include "test-cicd.fullname" . }}
因此,我的一位开发人员使用这样的函数为 Magento 电子商务网站制作自定义导航: getUrl() ?>">__('about') ?> 唯一的问题是它的输出如下: about 据我了解,如果同时
我是一名优秀的程序员,十分优秀!