java - 需要模拟 RabbitTemplate 的测试
问题描述
我有一个作为rabbitMQ发送者类的实现类,我正在尝试为此编写单元测试用例,但我对模拟rabbitmq模板有疑问。这是我的发件人类代码:
@Service
public class Car implements CarDelegate {
@Autowired
private RabbitTemplate rt;
@Value("${exchange}")
private String exchange;
@Value("${queue}")
private String queue;
@Override
public ResponseEntity<String> createCar(String model, String name) {
Car car = new Car();
car.setModel(Model);
car.setName(Name);
String jsonString;
jsonString = new ObjectMapper().writeValueAsString(car);
try {
rt.convertAndSend(exchange, queue, jsonString);
} catch (AmqpException e) {
//to implement
}
return new ResponseEntity<>(HttpStatus.ACCEPTED);
}
}
我的发送者类也是我的实现方法。它的测试类如下:
@RunWith(MockitoJUnitRunner.class)
public class CarTest {
private Car car;
@Mock
private RabbitTemplate rt;
@Test
public void create_valid() {
Car car = new Car(rt);
car.create("sedan", "arison");
String jsonString = "";
Mockito.doReturn("")
.when(rabbitTemplate.convertAndSend(null, null, jsonString))
.myMethod(Mockito.any(createLeadTest_valid.class));
Mockito.when(rabbitTemplate.convertAndSend(null, null, jsonString)).thenReturn("");
}
}
模拟兔子模板的正确方法是什么
解决方案
对于您的特定情况,无需向您的模拟添加行为。
public class CarServiceTest {
@Test
public void create_valid() {
RabbitTemplate rt = Mockito.mock(RabbitTemplate.class);
CarService car = new CarService(rt);
ResponseEntity<String> response = car.create("sedan", "arison");
assertThat(response).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}
}
ResponseEntity
仅供参考,在 HTTP 适配器(通常是用 注释的 bean)之外进行操作并不是一个好习惯@Controller
。
并且RabbitTemplate#convertAndSend
应该提供一种转换机制,所以你不必直接使用Jackson。
希望这会帮助你!
推荐阅读
- ruby-on-rails - ruby on rails中没有将String隐式转换为Integer错误
- javascript - 用变量或函数返回替换对象中字符串的某些部分
- android - 只能在模拟器上更新本机反应,不能在物理设备上更新
- python - 将字符串作为 dict 并通过 eval 对其进行格式化(不可下标)
- jackson - mapstruct中的条件映射
- javascript - ThreeJS:使用 tween.js - onClick 将相机移动到特定坐标
- java - 是否有在没有 root 权限的情况下在 Linux 中设置 java 线程优先级的解决方法?
- javascript - 使用 Node.js 的终端中的换行问题
- django - 使用 related_name 在 Django 的 Admin 中将 ManyToMany 呈现为水平过滤器
- swift - Code=-1016 "`parameters` 参数不是有效的 JSON。" UserInfo={NSLocalizedFailureReason=`parameters` 参数不是有效的 JSON。}