我有一个要测试的数据转换类。给出了接口 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成功完成后运行(否则在无效输入上运行这个测试是不明智的)。
对我来说,感觉嵌套测试可以解决这两个问题,因此是问题的标题。然而,这个例子可能会增长,我可能会添加不需要嵌套的独立测试,我想让它尽可能简单。
森栏
阿波罗的战车
相关分类