标签: springrunner

在junit5中使用SpringRunner有什么特别的配置吗?

我的微服务项目基于 spring-boot 框架,我所有的单元测试都在 spring runner 上运行。

@RunWith(SpringRunner.class)
Run Code Online (Sandbox Code Playgroud)

添加此注释,导入以下库:

import org.springframework.test.context.junit4.SpringRunner;
Run Code Online (Sandbox Code Playgroud)

如何将我的测试类设置为与 junit5 一起运行?

junit spring-boot junit5 spring-boot-test springrunner

8
推荐指数
3
解决办法
8756
查看次数

测试时排除 ApplicationStartup 事件侦听器

我最近在 SpringBoot 项目中添加了一个 ApplicationStartup 类

@Component
public class ApplicationStartup
    implements ApplicationListener<ApplicationReadyEvent> { ...
Run Code Online (Sandbox Code Playgroud)

它实现了 ApplicationListener。

现在,当我运行与该类无关的旧 JUNit 测试时,testrunner 尝试运行我的 StartupListener,这在这些情况下既不必要也不合适。

我的测试初始化​​时如何跳过 ApplicationListener?

@RunWith(SpringRunner.class)
@SpringBootTest
public class SubmissionItemManagerTest {...
Run Code Online (Sandbox Code Playgroud)

java junit spring-boot spring-boot-test springrunner

4
推荐指数
2
解决办法
5277
查看次数

为什么@SpringRunner测试在每次测试时都要重新初始化类?

@PostConstruct习惯在运行测试之前进行一些初始设置,但似乎该@PostConstruct方法在每个测试上都运行,而不是在初始化测试类后才运行一次。我还看到构造函数在之前的每个测试之前被调用@PostConstruct。为什么在每个@Test方法上初始化测试类,而不是一次初始化?

我在用 spring-boot-starter-test:1.5.7.RELEASE

样本测试设置:

@RunWith(SpringRunner.class)
public class TestClass {

    public TestClass() {
        System.out.println("constructor");
    }

    @PostConstruct
    public void setup() {
        System.out.println("setting up");
    }

    @Test
    public void test1() {
        System.out.println("test 1");
    }

    @Test
    public void test2() {
        System.out.println("test 2");
    }
}
Run Code Online (Sandbox Code Playgroud)

在输出中,“构造函数”被打印两次,而“设置”被打印两次。“测试1”和“测试2”分别打印一次。

spring-test spring-boot springrunner

2
推荐指数
1
解决办法
455
查看次数

在单元测试中使用SpringRunner是否可以?

我们正与同事争论这种方法.他们说只在集成或功能级别上使用SpringRunner.

问题是在下面的级别使用它的利弊是什么?

例如,我有简单的bean:

public class RewardDurationCalculator {

    private Clock clock;

    public OptionalLong calculate(DurationType durationType, List<Pass> passes) {
        long now = Instant.now(clock).getEpochSecond();
        switch (durationType) {
            case FULL_PASS:
                return getCurrentPassDuration(passes, now);
            case TILL_THE_END_OF_THE_CURRENT_ACTIVE_PASS:
                return getTimeInCurrentPassLeft(passes, now);
        }
        return OptionalLong.empty();
    }

    private OptionalLong getCurrentPassDuration(List<Pass> passes, long now) {
        return passes.stream()
                .filter(currentPass(now))
                .mapToLong(Pass::getDuration)
                .findFirst();
    }

    private OptionalLong getTimeInCurrentPassLeft(List<Pass> passes, long now) {
        return passes.stream()
                .filter(currentPass(now))
                .mapToLong(pass -> getEndTs(pass) - now)
                .findFirst();
    }

    private Predicate<Pass> currentPass(long now) {
        return pass -> pass.getStartTs() >= now && …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing spring-test springrunner

2
推荐指数
1
解决办法
1792
查看次数

SpringBoot @MockBean 和 @WebMvcTest 不起作用

控制器.java

@RestController
public class Controller {

    @Autowired
    private UserService userService;

    @Autowired
    private BookService bookService;

    //Below userService implementation
    @PostMapping(value = "/addNewUser", consumes = "application/json")
    public void addNewUser(@RequestBody User newUser) {
        userService.addNewUser(newUser);
    }

    @GetMapping(value = "/findUserById/{id}", produces = "application/json")
    public User findUserById(@PathVariable("id") Long id) {
        return userService.findUserById(id);
    }

    @GetMapping(value = "/findUserByName/{name}", produces = "application/json")
    public User findUserByName(@PathVariable("name") String name) {
        return userService.findUserByName(name);
    }
Run Code Online (Sandbox Code Playgroud)

UserServiceImpl.java

@Transactional
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public void addNewUser(User newUser) { …
Run Code Online (Sandbox Code Playgroud)

mockito spring-boot spring-boot-test springrunner

2
推荐指数
2
解决办法
5335
查看次数

对具有构造函数和需要使用mockito模拟的自动装配字段的类的方法进行单元测试

我有一个服务类,它使用构造函数扩展另一个服务。这个类有一个自动装配的字段和一个我想使用 Mockito 进行单元测试的方法。但是,我在为其编写一个单元时遇到了困难。

假设该服务看起来有点像这样:

@Service
public class SomeService extends Service {

    @Autowired
    private SomeClient someClient;

    public SomeService(Product product, @Qualifier(Constants.SOME_BEAN) Details temp) {
        super(product, temp);
    }
    @Override
    public State create() {
        Request request = new Request();
        request.set...
        request.set..

        Status status = someClient.createTenant(request);
        ..
        .. // construct a State object and return
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我正在为这个类编写一个测试,并尝试对上面的 create() 方法进行单元测试。当我的测试调用此方法时,我在模拟 someClient 时遇到问题。

测试类看起来有点像:

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
    private Detail temp;

    private SomeFacade service;

    private SomeClient someClient;

    private Product product;

    @Before
    public void setup() { …
Run Code Online (Sandbox Code Playgroud)

java spring unit-testing mockito springrunner

1
推荐指数
1
解决办法
1725
查看次数