作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
MongoDB Entity MyCardDO的字段,显式设置为唯一
@Indexed(unique=true)
private String uid;
并且有一个 MyCardService
用于 crud MyCardDO,有一个 MyCardServiceTest
用于测试 MyCardService
,有一个 add_repeat_uid_record_failed
内部MyCardServiceTest 测试uid 不能重复,
MyCardDO myCardDO1 = new MyCardDO();
myCardDO1.setUid("1");
myCardService.add(myCardDO1);
try {
MyCardDO myCardDO2 = new MyCardDO();
myCardDO2.setUid("1");
myCardService.add(myCardDO2);
Assert.fail();
} catch (DuplicateKeyException e) {
assertTrue(e.getMessage().contains("E11000 duplicate key error collection: opportunity-test.pro_mycard index: uid dup key: { : \"1\" }"));
}
如果我直接运行这个测试方法没问题,但是我运行整个 MyCardServiceTest
这个方法失败了,从 Wireshark 我知道 createIndexes
只执行一次,如果删除了它不会再次创建索引的集合
@After
public void tearDown() {
mongoTemplate.dropCollection(MyCardDO.class);
}
那么如何让spring在每个测试方法之前执行createIndexes呢?也就是
@Before
public void setUp() {
// how to auto execute createIndexes before every test method
// prepare some test data
myCardService.add(myCardDO1);
}
附:
@RunWith(SpringRunner.class)
@DataMongoTest(includeFilters = @ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,value={MyCardService.class}))
@ActiveProfiles("test")
@Import(SpringMongoConfig.class)
public class MyCardServiceTest {
//...
}
最佳答案
我的最终决定:
@After
public void tearDown() {
mongoTemplate.remove(new Query(), MyCardDO.class);
}
@AfterClass
public static void finalClean() {
mongoTemplate.dropCollection(MyCardDO.class);
}
也就是说,在每个测试方法完成后只删除所有记录,最后当整个测试类完成时删除集合。
关于spring-boot - 如何让spring data mongodb在每个测试方法之前执行createIndexes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55205667/
我是一名优秀的程序员,十分优秀!