我用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单例,并且运行节点的唯一方法是使用他的配置文件。
我该怎么办?
答案 0 :(得分:0)
我会看一下Mockito框架。模拟出TransactionService
。与其启动2台服务器,不如将其更多地用作集成测试而不是单元测试。