[英]Change the value for each test method before @Before annotation is called in JUnit
我正在为具有设置的课程编写测试
class A
{
private String name;
public String getName()
{
return "Hello "+ name;
}
public void setName(String name)
{
this.name = name;
}
我的考试课
TestA
A a = new A();
{
@Before
void setup()
{
a.setName("Jack");
}
@Test
public void testTom()
{
assert(a.getString(), "Hello Tom");
}
@Test
public void testJack()
{
assert(a.getString(), "Hello Jack");
}
自@Before调用每个测试方法以来,如何更改方法之间的name值? 即)如果执行testJack,则输出应为Hello Jack。 我尝试使用@Parameters,但是在调用该设置之前,我无法实现此功能。
一,代码:
@Before
void setup()
{
A a = new A();
a.setName("Jack");
}
不执行测试可以看到的任何操作。 您正在创建一个局部变量a
,该变量几乎立即超出范围。
@Before
旨在在每次测试运行之前设置和重置状态或上下文。 除非它依赖于调用之间的更改,否则它不会变化。
您可以创建一个Stack作为实例变量,并在@BeforeClass
方法中对其进行预填充,并让@Before
弹出一个每次调用时都要使用的值。 这是不可取的,因为它假定测试将以某些特定顺序运行。 在每个测试中声明不同的值会更加清晰明了。
这样做根本没有意义; 因为您的真正问题根源于您的语句“ 只需假设安装程序中包含30行代码 ”。
如果您需要30行设置代码,那么被测代码就没有遵循“单一职责原则”,并且做了太多不同的事情。
当然,您可以通过“数据驱动”测试以某种方式到达那里(例如,请参见此处 )。 但这将解决XY问题的Y侧。
我知道,这听起来很刺耳:但是您最好退后一步。 并了解如何进行合理的OO设计(例如,基于SOLID )。 然后,您需要重新编写代码, 而无需30行设置代码。
您会发现,如果您的代码是如此难以测试; 我向您保证:这也很难理解,并且随着时间的推移几乎将无法维护/增强。 除此之外:一开始就很难使代码“正确”。
长话短说:看看这些视频 ,提高您的设计技能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.