我是Spring的新手。我的GCGood类与CrudRepository一起保存到MySQL-DB。它工作正常。
现在我尝试编写JUnit-Test。当然,我不希望任何测试数据存在于我的数据库中。所以我写了我的测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class GCGoodTests {
@MockBean
private GCGoodRepository goodRepository;
@Test
public void getterSetterTest()
{
GCGood testDummy = new GCGod();
testDummy.setAttribute("Muhaha");
testDummy.setColor(Color.BLACK);
testDummy.setName("Maka");
testDummy = goodRepository.save(testDummy);
Iterable<GCGood> testDummy2 = goodRepository.findAll();
assertEquals(testDummy.getAttribute(), "Muhaha");
assertEquals(testDummy.getColor(), Color.BLACK);
assertEquals(testDummy.getName(), "Maka");
assertNotNull(testDummy.getId());
assert(testDummy.getId()>0);
assertNotNull(testDummy2);
}
}
Unfortuantelly&#34; testDummy = goodRepository.save(testDummy); &#34;和&#34; Iterable testDummy2 = goodRepository.findAll(); &#34;返回null,测试甚至没有完成。
如果我将@MockBean更改为@Autowire,一切正常。但是我的数据库中有不必要的data-shmodda。
那么,如何在没有data-shmodda的情况下实现校正测试?
答案 0 :(得分:1)
虽然你已经注入了mocked-bean但是你实际上没有提到过必须被模拟的方法以及你在mocked bean上调用某个方法时的期望。你可以做的是,只需像这样编写@Before方法:
@Before
public void setup() {
List<GCGood> gcgoods = Collections.emptyList();
given(goodRepository.findAll()).willAnswer(gcgoods);
}
给定的()和willAnswer()位于BDDMockito中,您可以通过import static org.mockito.BDDMockito导入。*;
答案 1 :(得分:1)
看起来您想要进行集成测试。如果是这样,您应该使用@DataJpaTest
注释,该注释可以在内存数据库中运行测试时为您创建环境。您可以在documentation找到更多信息。
这也取决于你想要测试的内容。如果存储库(GCGoodRepository)是您的测试目标,您应该@Autowired
它并使用内存数据库中的一些来在隔离环境中测试它,如上所述。如果你测试一些依赖于某个存储库的服务(例如GCGoodRepository),你应该像@karthi提到的那样模拟这个存储库。