首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重用测试实现?

如何重用测试实现?
EN

Stack Overflow用户
提问于 2022-09-07 20:17:28
回答 1查看 61关注 0票数 0

我开始为不同的算法创建JUnit测试,但很快我意识到,大多数时候,我都会编写相同的代码,所以我决定集中处理这些部分。

与其对DB进行多次调用,我更喜欢创建一个模拟,并从CSV读取值。我嘲笑每个负责调用DB并返回值的提供程序。

假设我有以下提供者: A,B,C,D,E,F。

我为每个抽象类创建了一个抽象类,其中我有一些方法,一个用于读取csv的值,另一个用于筛选结果并在WhisthRe转折点语句中使用: AMock、BMock、CMock、DMock、EMock、FMock。

我知道我不能创建一个扩展所有这些类的测试,所以现在,我使用这个解决方法:

EMock扩展FMock

DMock扩展EMock

CMock扩展DMock

BMock扩展CMock

AMock扩展BMock

MyTest1扩展AMock

MyTest2扩展AMock

MyTest3扩展CMock

等。

但我不太喜欢,因为我不是每次都需要它,

例如,如果MyTest2只需要AMock和EMock,那么扩展AMock,我就拥有它们了。

有更优雅的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-07 21:12:37

我宁愿使用组合(依赖注入)来实现这种抽象(可重用性),而不是继承。

如下所示:

代码语言:javascript
复制
class MyTest1 {

  private AMock aMock;

  ...
  
}

当然,您可以使用继承来避免BMock、CMock中的重复。等等,但即使在这里,我也宁愿用构图来达到同样的目的。通常,如果要强制执行某些行为(通常通过构造函数和抽象方法),则应该使用继承。

在您的例子中(据我理解),您更感兴趣的是每个模拟独立提供的特性。

如果EMock内部使用来自BMock的方法.为完成其任务:

代码语言:javascript
复制
class EMock {

  private AMock aMock;
   
  private BMock aMock;

  ...
  
}

如果在BMock中没有使用来自EMock的任何内容,那么:

代码语言:javascript
复制
class MyTest1 {

  private AMock aMock;

  private BMock bMock;

  ...

  private EMock eMock;

  
  // further methods where aMock.doSomeStuff() ... is called.
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73641034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档