Java 7中的间谍中的单元测试@Asynchronous方法

时间:2018-11-09 07:50:03

标签: java junit mockito future

我正在尝试测试一些糟糕的旧版代码(Java 7)
我需要监视无状态服务,但要调用异步方法

我得到了错误

  

对象并不代表实际的未来

我应该如何尝试测试呢?

@InjectMocks
private OrderDataImport spyImporter;

/* has spyImporter as a dependency */
@InjectMocks
private ImportService sut; /* system under test */

@Before
public void setUp() {
    // create spy
    spyImporter = Mockito.spy(new OrderDataImport());
    MockitoAnnotations.initMocks(this);
}

@Test
public Test() {
   sut.import();
}

导入代码

class ImportService {
   @EJB
   private OrderDataImport dependency;


   public boolean import() {
       List<Future<Result>> resultList = new ArrayList<>();

       int THREAD_COUNT = 3;
       while (THREAD_COUNT-- > 0)
           resultList.add(dependency.create(...));

       for (int i = 0; i < resultList.size(); i++) {
           /* Object does not represent an actual Future */
           Result result = resultList.get(i).get(60, TimeUnit.MINUTES);
       }           
   }
}

2 个答案:

答案 0 :(得分:0)

也许您需要Mockito的静态方法when(),只需尝试一下

- set_fact: default_attr: attr1 : - "1" nexatt : - "b" - set_fact: app_attributes="{{ default_attr | to_json | regex_replace('\:\ ','=') | regex_replace('[\[\]{}\"]') }}" - debug: var=app_attributes

答案 1 :(得分:0)

除了SUT本身,您不应监视测试中的其他任何事情。

OrderDataImport是一个依赖对象,您应该嘲笑它,而不是间谍。

您还应该仅在SUT上使用@InjectMocks

@Mock
private OrderDataImport importerStub;

@InjectMocks
private ImportService sut; 

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

@Test
public Test() {
   // Arrange
   when(importerStub.create(..)).thenReturn(/* Future instance */);

   // Act
   sut.import();
}

最后,我发现您真的不需要在这里进行任何间谍活动。