我有一个要测试的数据转换类。给出了接口 ITransformer。这个类看起来像这样:
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
块,但该块不是一个适当的测试。
其次,我如何分离test_transformation_1
出自己的测试,但要确保仅在testTransform
成功完成后才运行此测试(否则在无效输入上运行此测试是不明智的)。
对我来说,感觉嵌套测试可以解决这两个问题,因此是问题的标题。然而,这个例子可能会增长,我可能会添加不需要嵌套的独立测试,我希望它尽可能简单。
是什么让你认为“语义上”它属于 BeforeClass ?!从语义上讲,测试属于被测类的任何方法的预期行为......属于测试方法。不进入准备休息的方法。
一个有意义的init 方法需要接收每个测试用例设置数据。所以,如果有的话,你会有一个字段MyDataTransformer underTest 在@Before 方法中被初始化。带有稍后允许正确测试的参数。
测试 init 方法是否按预期运行并抛出异常属于一个独特的、名字很好的 @Test 方法。
除此之外,您可以强制 Junit 执行给定某种顺序的测试用例(例如按字典顺序排序)。这不是很好的做法,但有时是解决此类排序问题的好方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句