gpt4 book ai didi

java - JUnit 4 : Nested tests

转载 作者:行者123 更新时间:2023-11-28 20:49:24 26 4
gpt4 key购买 nike

我有一个要测试的数据转换类。给出了 ITransformer 接口(interface)。该类看起来像这样:

public class MyDataTransformer implements ITranformer {

public MyDataTransformer() {}

@Override
public void init(String[] args) throws Exception {
if (args.length == 0)
throw (new Exception("bad input"));

// do initialization
}

@Override
public byte[] transform(byte[] input) {
try {
return transform_internal(input);
} catch (Exception e) {
return null;
}
}

private static byte[] transform_internal(byte[] input) throws Exception {
// do something
}
}

这是我目前的测试类:

public class TransformerTest {

private MyDataTransformer transformer;

@BeforeClass
public void setUp() {
String[] args = new String[4];
// set args

try {
transformer = new MyDataTransformer();
transformer.init(args);
} catch (Exception e) {
fail(e.getMessage());
}
}

@Test
public void testTransform() {
byte[] input = read_input(); // omitted here for brevity

byte[] output = transformer.transform(input);
// this only tests if "valid" data was returned, but does not look into it
assertNotNull("Transformation failed", output);

// these 2 test some properties of the result data and should be separate tests
assertTrue("transformation step 1 failed", test_transformation_1(output);
assertTrue("transformation step 2 failed", test_transformation_2(output);
}
}

在测试方面,我遇到了两件事。

首先,如何正确地只测试一次 init 方法?从语义上讲,init 属于 @BeforeClass block ,但该 block 不是适当的测试。

其次,我如何将 test_transformation_1 分离到它自己的测试中,但要确保它仅在 testTransform 成功完成后运行(否则它是不明智的在无效输入上运行此测试)。

对我来说,感觉嵌套测试可以解决这两个问题,因此问题的标题。然而,这个例子可能会增长,我可能会添加不需要嵌套的独立测试,我希望它尽可能简单。

最佳答案

是什么让您认为“语义上”它属于 BeforeClass?!从语义上讲,测试属于被测类的任何方法的预期行为......属于 test 方法。不喜欢准备休息的方法。

有意义 init 方法需要接收每个测试用例设置数据。因此,如果有的话,您将拥有一个在 @Before 方法中初始化的字段 MyDataTransformer underTest。使用稍后允许进行适当测试的参数。

测试 init 方法的行为是否符合预期并抛出属于一个独特的、命名良好的 @Test 方法。

除此之外,您还可以强制 Junit 执行给定顺序(例如字典排序)的测试用例。这不是很好的做法,但有时可以解决此类订购问题。

关于java - JUnit 4 : Nested tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53246854/

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