我们试图在Mule中为自定义变换器编写Junit测试用例。 但是我们无法在测试类中调用doTransform()方法。
后来我们意识到看到Mule为单元测试用例提供功能的mule文档。
根据我们扩展的文档AbstractTransformerTestCase
,有一些方法可以实现。
@Override
public Transformer getTransformer() throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Transformer getRoundTripTransformer() throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getTestData() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object getResultData() {
// TODO Auto-generated method stub
return null;
}
我们现在对以下事情感到困惑:
@Test(expected = RuntimeException.class)
但是如何在mule单元测试用例中进行测试?AbstractTransformerTestCase
?? 请帮助我们。自2周以来我们不了解任何事情。
答案 0 :(得分:4)
要在Mule中测试变形金刚,请执行以下操作:
org.mule.transformer.AbstractTransformerTestCase
并实施抽象方法(look at the test for the Base64 transformer as a good example)。这涵盖了变压器的基础知识。org.mule.tck.junit4.FunctionalTestCase
创建功能测试用例并创建标准JUnit4 @Test
方法进行交互使用您将在测试配置中配置的变压器。答案 1 :(得分:0)
当您开始测试时,您可以从使用测试驱动开发等良好实践开始。你需要:
您不需要:
当您编写变换器测试时,您正在测试变换器的行为是否正常(好吧,它将一个对象转换为另一个对象) - 因此在您的测试用例中,您只需实例化变换器并使用一些输入命中转换方法并执行断言结果。如果您的变压器可以在没有mule的情况下实例化,并且在转换时不需要协作,那么您只需要进行单元测试。
如果您需要与mule,Java EE或您需要测试它们的任何子系统进行协作 - 这里模拟就会发挥作用。您只需提供模拟并定义您的类与其协作的期望(您正在测试您的类,mulen或JDBC驱动程序),而不是在服务基础结构时进行操作。以下是另一个奇怪环境(android)的单元测试示例:
/**
* shall inject assignable views into class
* note that mocks are specifuied as parameters
*/
@Test
public void testSimpleInjection(@Mocked final WithInjectableViews injectable,
@Mocked final TextView textView,
@Mocked final Button button) {
// we expect that certain methods will be called on mocked objects
new Expectations() {
{
injectable.findViewById(239);
returns(textView);
injectable.findViewById(555);
returns(button);
}
};
// method under test
ViewInjector.startActivity(injectable);
// assertions
assertEquals(textView, Deencapsulation.getField(injectable, "asView"));
assertEquals(button, Deencapsulation.getField(injectable, "button"));
assertNull(Deencapsulation.getField(injectable, "notInjected"));
}
// class derived from android activity, base class is not instantiable
// in normal java environment, only on the phone or emulator but this is not
// practicable
class WithInjectableViews extends Activity {
// shall be injected
@InjectView(id = 239)
private android.view.View asView;
@InjectView(id = 555)
private Button button;
// shall be left alone
private View notInjected = null;
}