java - 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 测试。
事务控制器:
@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 单例,并且运行节点的唯一方法是使用他的配置文件。
我怎么能做到?
解决方案
我会看看 Mockito 框架。嘲笑TransactionService
. 而不是启动 2 个服务器,这更适合于集成测试而不是单元测试。
推荐阅读
- python - 如何在魔法中设置 Cython 语言级别
- mongodb - 使用 $lookup 和 let 和管道在 MongoDB 中声明变量
- matlab - 如何在 MATLAB 中使用 Line 或 annotation 对象绘制轴外的对象?
- go - 如何使用带有版本化 Go 模块的分叉模块(v1.11+,GO111MODULE=on)
- azure - Microsoft.Azure.Management.CosmosDB.Fluent 在设置 IpRangeFilter 时失败
- wordpress - 如何使用 json API 更新自定义字段
- jsonschema - json-schema 描述对象键的值(当键是动态的时)
- html - 为什么 flex 容器小于其内容
- xcode - React Native:应用程序不再出现在模拟器中
- algorithm - 从表达式转换为图形 (DAG) 表示的算法