【问题标题】:spring-boot - running junit test with two serversspring-boot - 使用两台服务器运行 junit 测试
【发布时间】:2018-09-03 10:58:45
【问题描述】:

我用 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 单例,并且运行节点的唯一方法是使用他的配置文件。

我该怎么做?

【问题讨论】:

    标签: java spring spring-boot junit


    【解决方案1】:

    我会看看 Mockito 框架。模拟TransactionService。而不是启动 2 个服务器,这更适合于集成测试而不是单元测试。

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 2023-03-13
      • 1970-01-01
      • 2022-10-24
      • 2018-11-09
      • 2021-09-05
      • 2021-05-20
      • 2017-08-07
      • 2017-10-30
      相关资源
      最近更新 更多