gpt4 book ai didi

.net - 什么是好的策略?在没有默认虚拟的情况下在 C# 中使用 Mocks 进行测试

转载 作者:行者123 更新时间:2023-12-04 06:25:18 26 4
gpt4 key购买 nike

在模拟和测试方面,我遇到了 C# 的一个很大的缺点。我对这个问题的解决方案是不可取的。

我有三个类一起执行一些功能。使用接口(interface)或显式声明任何虚拟方法没有任何意义,因为设计并不真正需要扩展或多态性。任何使类可重用的努力只会使代码复杂化。

但是,因为我没有明确声明任何虚拟方法,我无法模拟这些类并通过框架记录它们的调用。伪代码(使用 Rhino.Mocks)看起来像这样。

var b = mockRepo.StrickMock<ClassB>();
var c = mockRepo.StrickMock<ClassC>();
var classUnderTest = new ClassUnderTest{ B = b, C = c};

Expect.Call( b.MethodA );
Expect.Call( c.MethodB );

mockRepo.ReplayAll();
classUnderTest.DoSomething();
mockRepo.VerifyAll();

就目前而言,我必须将 b.MethodA 和 c.MethodB 设为虚拟才能正常工作。或者,我可以提取 ClassB 和 ClassC 的接口(interface)并模拟它们。但正如我之前所说,这只会使事情复杂化。我可以更改类的设计以使其更具可重用性,但这也会使事情复杂化,并且功能重用的机会非常低。

我应该如何解决这个问题,并且仍然努力保持依赖关系和执行代码之间的简单性?我错过了一个选择吗?您更愿意采用哪种方法?

最佳答案

这些接口(interface)是您的单元测试的接缝,可以轻松插入假货。我看不出它们会如何使事情复杂化(除了增加类型的数量)。

接口(interface)使调用者和被调用者之间的契约明确。此外,这些界面还为创建“名称系统”提供了机会。该接口(interface)还可以更轻松地查看不属于的成员(与可以吸引不相关方法的类相反)。

总之,要付出很小的代价。

关于.net - 什么是好的策略?在没有默认虚拟的情况下在 C# 中使用 Mocks 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113250/

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