我创建了一个带有控制器、服务和存储库层的基本 Rest API。我现在正在尝试为服务层方法编写一个单元测试,该方法通过产品 ID 查找产品。但是,当我运行测试时,它在我尝试模拟存储库 findById() 方法的行中抛出 NullPointerException。
服务层的getProductById()方法如下:
public Product getProductById(String id){ return productRepository.findById(id).orElse(null); }
我的服务层测试类:
package com.product.Services;
import com.product.Entities.Product;
import com.product.Repositories.ProductRepository;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
class ProductServiceTest {
@InjectMocks
ProductService productService;
@Mock
ProductRepository productRepository;
@Test
void getProductById() throws Exception {
Product product = new Product();
product.setId("001");
product.setName("TV");
product.setPrice(999.99);
when(productRepository.findById("001").orElse(null)).thenReturn(product);
assertEquals(product,productService.getProductById("001"));
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个混合的 Scala/Java maven 项目,其中应用程序代码、单元和集成测试是用 Java 编写的,但性能测试是用 Scala 编写的。
Scala 性能测试依赖于几个具有@DataLombok 注释的 Java 集成测试类。为了让 getter 和 setter 工作,我必须进行编译JavaThenScala,这可以通过 IntelliJ Scala 编译器设置来完成。
我的问题是 - 有没有办法可以设置我的 Maven 插件来进行JavaThenScala编译,而无需调整 IntelliJ 设置,因为我想将代码部署到其他地方?
我正在尝试使用该compileOrder配置,但它似乎对我不起作用。
我的 Maven 插件:
<build>
<plugins>
<plugin>
<groupId>met.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.0.0</version>
<configuration>
<compileOrder>JavaThenScala</compileOrder>
</configuration>
</plugin>
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)