我有一个服务类MyBusinessService,有两个方法doABC()和doXYX()。方法doABC()将工作委托给ABCHandler.do(),方法doXYX()将工作委托给XYZHandler.do()。 MyBusinessService类方法只是将作品委托给相应的处理程序。
我在这里有一个问题。当我为此编写单元测试时,我必须为处理程序中的方法编写单元测试。我应该为MyBusinessService类方法编写UT吗?我问这个问题有两个原因。
一个。使用UT测试,不应在2个位置测试一个功能。我的实际逻辑是在处理程序类中,我不应该在处理程序类和服务类
中单元测试相同的逻辑湾如果我不为MyBusinessService类方法编写单元测试,那么将来如果某些开发人员修复了一些bug并破坏了某些东西,那么它可能会导致应用程序在生产中失败。所以,我需要在这里进行测试。但是如果我为这个类编写测试用例,这将违反规则(a)。
请告诉我是否应该为委派类(MyBusinessService类)编写UT,或者我应该将其留给Integration测试用例来解决它。
答案 0 :(得分:0)
单元测试必须只测试一个类。如果您测试多个类实例的交互,那么您正在进行集成测试。您应该考虑使用一些模拟库,如jmock或mockito,第一个适合我的用途。
如果你使用jmock,你可以这样做:
@Test
public void someTestMethod(){
MyBusinessService instance = new MyBusinessService()
Mockery context = new Mockery();
ABCHandler mock1 = context.mock(ABCHandler.class); //creating a mock object
instance.setABCHandler(mock1);
context.checking(new Expectations(){{
oneOf(mock1).do(); //creating a expectation wich expects exactly on call of method do.
}});
instance.doABC();
context.assertIsSatisfied(); //check if the expectation is met
}