- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用mockito尝试了junit,并为编码练习编写了一些测试用例。
这是我编写的测试用例:
@RunWith(SpringRunner.class)
public class TransactionControllerTest {
@Mock
TransactionService transactionServiceMock;
@InjectMocks
TransactionController transactionController;
TransactionRequest txn = new TransactionRequest("123.34", "2018-11-28T23:32:36.312Z");
@Test
public void testSaveTxn() throws Exception {
Mockito.when(transactionServiceMock.saveTxn(Mockito.any(TransactionRequest.class))).thenReturn(true);
ResponseEntity<?> responseEntity = transactionController.saveTxn(null, txn);
assertTrue(responseEntity.getStatusCode().equals(HttpStatus.CREATED));
}
@Test
public void testGetStats() throws Exception {
StatsResponse sr = new StatsResponse("0.00", "0.00", "0.00", "0.00", 0L);
Mockito.when(transactionServiceMock.getStats()).thenReturn(sr);
ResponseEntity<StatsResponse> responseEntity = (ResponseEntity<StatsResponse>) transactionController.getStats(null);
System.out.println("sr response = "+responseEntity.getBody());
assertTrue(responseEntity.getBody().equals(sr));
}
@Test
public void testDelete() throws Exception {
Mockito.doNothing().when(transactionServiceMock).delete();
ResponseEntity<HttpStatus> responseEntity = (ResponseEntity<HttpStatus>) transactionController.deleteTxn(null);
System.out.println("sr response = "+responseEntity.getBody());
assertTrue(responseEntity.getStatusCode().equals(HttpStatus.NO_CONTENT));
}
}
测试用例运行良好。
但是我的申请被拒绝,原因如下:
You were using SpringRunner even though you are not using SpringContext in the tests, and mocking everything.
现在,以下是我的担忧:
测试用例有什么问题?
上述拒绝原因是什么意思?
我该如何纠正这个问题?
最佳答案
What's wrong with the test cases?
我认为他们希望你做的是编写一个 Spring Web 层测试。这不是 spring MVC 测试/spring-boot 测试。因为您没有将 Controller 作为 Spring 加载的资源进行测试。您将其作为一个简单的 java 类进行测试。这并不能证明它作为 Spring Controller 的行为是否正确。您将无法测试以下功能:
How can i correct that?
您必须编写 Spring MVC 测试并使用 MockMvc
或 RestTemplate
来验证您的 Controller 。例如;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = YourContext.class)
@WebAppConfiguration
public class MyWebTests {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void foo() throws Exception {
mockMvc.perform(get("/status"));
//and verification
}
}
使用mockito模拟并不是最糟糕的主意,但你可以使用自动连接的@MockBean
s。
如果这是 spring-boot,你将拥有更多的灵 active 。查看以下资源。
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html https://spring.io/guides/gs/testing-web/
关于java - 编写 JUnit 测试用例时使用 SpringRunner 而不使用 SpringContext 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551001/
我正在尝试按如下方式创建 Spring 集成测试: @RunWith(SpringRunner::class) @ActiveProfiles(profiles = ["Test"]) @Contex
我有一个 spring-boot 应用程序,我正在尝试为其创建单元测试用例。下面是我尝试运行的代码,我没有任何配置文件(仅使用注释)所以加载所有配置的主类是 ElastSearchBootApplic
我找不到哪个 jar 会为我提供 SpringRunner.class 的依赖项 我正在尝试将我的集成测试升级到 spring-boot 1.4.0 最佳答案 SpringRunner.java位于s
我们正在与我的同事讨论这种方法。他们说仅在集成或功能级别使用 SpringRunner。 问题是在以下级别使用它的利弊是什么? 例如我有简单的 bean : public class RewardDu
在单元测试中,@Runwith(SpringRunner.class) & @SpringBootTest有什么区别? 你能给我解释一下每一个的用例吗? 最佳答案 @RunWith(SpringRun
当我创建 JUnit 测试时: @RunWith(SpringRunner.class) @SpringBootTest @DirtiesContext(classMode = DirtiesCont
每当我看到一篇与 Spring 测试相关的博文时,我都会看到这些类中的任何一个,但不明白真正的区别: @RunWith(SpringRunner.class)@RunWith(Sprin
您好,我正在尝试使用 SpringRunner.class 运行我的单元测试。我正在测试类中为 jdbcTemaplte 创建一个新实例。我正在使用 H2 DB 进行单元测试,并且我能够使用 jdbc
我正在使用@PostConstruct在运行测试之前进行一些初始设置,但似乎@PostConstruct方法在每个测试上运行,而不是仅在测试类初始化后一次。我还看到在 @PostConstruct 之
我尝试在 Intellij IDEA 中导入现有项目。所有依赖项均已解决,项目构建成功。当我尝试执行项目时,我收到以下错误消息: Could not initialize class org.spri
我们的 Spring Boot REST API 目前有一个相当大的单元测试存储库。单元测试将常见的可重用测试代码重构为 TestUtil类是 @Component注释。 看来SpringRunner
这是我在 stackoverflow.com 上提出的第一个问题。 最近我一直在寻找一种方法来更改 Spring Boot (2.x) 命名其通过 @Component (etc) 注释创建的 bea
我尝试用静态方法为类编写单元测试。 当我使用 @RunWith(MockitoJUnitRunner.class) 时,我的测试运行成功,但是当我将其更改为 @RunWith(SpringRunner
我正在尝试测试 JavaMail api 并使用 SpringRunner 和 PowerMockRunner,但它失败了。 @RunWith(PowerMockRunner.class) @Powe
我正在寻找一种方法来最小化 SpringBootTest 的启动时间目前最多需要 15 秒才能启动并执行测试。我已经使用了模拟 webEnvironment和 standaloneSetup()具体的
我收到以下编译器错误: Type mismatch: cannot convert from Class to Class 从此代码: import org.junit.runner.RunWith;
这是一个用于 java spring 数据存储库层的单元测试类。 我有一个spring数据存储库层,其中使用@Autowired注解注入(inject)TestEntityManager类型对象(属于
我用mockito尝试了junit,并为编码练习编写了一些测试用例。 这是我编写的测试用例: @RunWith(SpringRunner.class) public class Transaction
我们有一个 Spring 5 应用程序,使用 JUnit 4 作为测试工具(使用 SpringRunner)。我们遇到一个问题,即未标记带有 @Test 注释的私有(private)帮助器方法正在作为
我使用 @RunWith(MockitoJUnitRunner.class) 与mockito 进行 junit 测试。但现在我正在使用 spring boot 应用程序并尝试使用 @RunWith(
我是一名优秀的程序员,十分优秀!