gpt4 book ai didi

c# - 如何测试具有大量依赖项的代码

转载 作者:行者123 更新时间:2023-11-30 22:36:11 24 4
gpt4 key购买 nike

我正在处理一个基本上没有单元测试覆盖率的大型代码库。我们即将开始转向更加测试驱动的方法,所以我想我会尝试为我添加的一个非常简单的函数编写一个单元测试,基本上

class ClassUnderTest  {
public void SetNoMatchingImage() {
currentState.State = FSMState.NoMatchingImage;
... // Some more logic
NotifyViews();
}

public ViewStatus GetStatus() {
...
if (currentState.State == FSMState.NoMatchingImage)
return ViewStatus.EmptyScreen;
...
}

...
}

好的,那么测试这个,我只想做:

[Test]
public void TestSetNoMatchingImage() {
ClassUnderTest view = new ClassUnderTest(...);
view.SetNoMatchingImage();
Assert.AreEqual(ViewStatus.EmptyScreen, view.Status);
}

但我的问题是 ClassUnderTest 构造函数将 3 个参数传递给不能为 null 的非接口(interface),因此我无法轻松创建 ClassUnderTest。我可以尝试创建这些类的实例或 stub 它们,但问题对它们来说是一样的:每个构造函数都采用必须创建的参数。问题是相同的......等等。结果当然是非常大的开销,即使是非常简单的测试也需要大量代码。

是否有一种处理此类情况的好方法,使测试用例更易于编写?

最佳答案

当您在没有测试的情况下开始重构项目时,如果它不是在设计时考虑到依赖注入(inject)并且您使用的模拟框架不能模拟具体类(例如 NMock),那么您会遇到很多这样的情况。

正如 Andriys 刚才提到的,Typemock(还有 moq)只要有虚拟成员就可以模拟具体类。

就个人而言,我会从这三个类中的每一个中提取一个接口(interface),并将接口(interface)作为某些重构的一部分注入(inject),以使该类易于测试。我不记得 VS 是否有重构以在两次点击中提取界面,这不会花费太长时间。

关于c# - 如何测试具有大量依赖项的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131051/

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