8

私は次のシナリオを持っています

 interface DAO
 {
      String a();
      String b();
      String c();

 }

このDAOインターフェイスのモックを作成し、DAOProcessと呼ばれるものにフィードします。DAOProcess内には、DAOメソッドa、b、cを呼び出すさまざまなメソッドがあります。

これで、DAOProcessでメソッドを単体テストする必要があるたびに、を書くことになりますwhen(mockDAO.a()).thenReturn("test")

とにかく、これらwhen(mockDAO.a()).thenReturn("test")をすべてのテストケースに共通に移動できますか?

4

2 に答える 2

11

テストケースがすべて1つのクラスにある場合は、次のように注釈が付けられたメソッドを使用できます@Before

...
private DAO mockDAO;

@Before 
public void setUp() {
    mockDAO = mock(DAO.class);
    when(mockDAO.a()).thenReturn("test");
    ...etc...
}    
...

または、多くのテストクラスで動作が必要な場合は、Mockインスタンスで動作を設定するユーティリティクラスを作成できます。例:

public class MockDAOPrototype {
    public DAO getMockWithDefaultBehaviour() {
        final DAO mockDAO = mock(DAO.class);
        when(mockDAO.a()).thenReturn("test");
        ...etc...

        return mockDAO;
    }
}

次に、メソッドを呼び出しMockDAOPrototype.getMockWithDefaultBehaviour()ますsetUp

于 2012-12-20T11:46:17.663 に答える
5

abstractこのモックが必要なすべてのテストケースによって拡張されるAbstractTestCaseクラスを作成できます。その抽象的なテストケースでは、次のステートメントがあります。

 @Ignore // just in case your runner thinks this is a JUnit test.
 public abstract class AbstractTestCase
 {
      @Mock
      private DAO mockDAO;

      @Before
      private void setupMocks()
      {
           when(mockDAO.a()).thenReturn("test")
           ....
      }
 }

具体的なテストケースクラスでは、

 public class MyConcreteTestCase extends AbstractTestCase
 {
      @InjectMocks
      @Autowired
      private DAOProcess daoProcess;

      ....
 }
于 2012-12-20T11:42:51.947 に答える