首页 > 解决方案 > 在 Java 7 中的间谍中对 @Asynchronous 方法进行单元测试

问题描述

我正在尝试测试一些糟糕的遗留代码(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);
       }           
   }
}

标签: javajunitmockitofuture

解决方案


也许你需要mockito的静态方法when(),试试看

doReturn({Future subclass instance}).when({reference spyImporter}).get(anyInt(),xx)


推荐阅读