春季启动-使用两台服务器运行junit测试

时间:2018-09-03 10:58:45

标签: java spring spring-boot junit

我用java spring-boot创建了一个服务器(“节点”)。节点实例很少,因为每个节点的配置文件不同。例如:

node1.properties:

application.name=FullNode
receiving.server.addresses=tcp://localhost:8001
propagation.server.addresses=tcp://localhost:8002
recovery.server.address=http://localhost:8060
....

节点2.properties:

application.name=FullNode
receiving.server.addresses=tcp://localhost:6001
propagation.server.addresses=tcp://localhost:6002
recovery.server.address=http://localhost:8050

...

为了测试将数据发送到服务器的过程,我为TransactionController编写了一个JUnit测试。

TransactionController:

@RestController
@RequestMapping("/transaction")
public class TransactionController {

    @Autowired
    private TransactionService transactionService;
    ...

    @RequestMapping(method = PUT)
    public ResponseEntity<Response> addTransaction(@Valid @RequestBody 
             AddTransactionRequest addTransactionRequest) {
        return transactionService.addNewTransaction(addTransactionRequest);
    }
...
}

测试:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = AppConfig.class)
@SpringBootTest
public class DBTests {
    @Autowired
    private TransactionController transactionController;

    @Test
    public void addTransaction() {
        transactionController.addTransaction(transactionRequest);
    }
}

问题是,每个节点还将其事务发送到其他节点。但是我如何用JUnit测试呢?我不能仅仅在测试中创建一个TransactionController的两个实例,因为TransactionController是一个Spring bean单例,并且运行节点的唯一方法是使用他的配置文件。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我会看一下Mockito框架。模拟出TransactionService。与其启动2台服务器,不如将其更多地用作集成测试而不是单元测试。