我想自动测试我的 spring api。现在我有大约 7-8 个有趣的情况并做出:
这很难。有什么简单的方法吗?
我可以在春天之前完成吗?早期我用 python/django 编程并使用类似的方式。
我认为解决这个问题的一种方法是通过自定义属性文件和@Configuration类。
您将为每个测试创建属性文件,例如test1-dbA.properties
jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
jdbc.username=db1
jdbc.password=..
接下来,您将定义从 test1-dbA.properties
加载属性的 DataSource bean@Configuration
@EnableJpaRepositories(basePackages = "org.baeldung.repository")
@PropertySource("test1-dbA.properties")
@EnableTransactionManagement
public class DB1Config {
@Autowired
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
// ...
}
在 JUnit 测试中,您将加载配置类:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class, DB1Config.class})
public class db1Test{
// ...
}
可以在此处查找此选项和其他选项:https://www.baeldung.com/spring-testing-separate-data-source和https://www.baeldung.com/spring-jpa-test-内存数据库
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
@GetMapping("/{id}")
public User getUserById(@PathVariable String id) {
return userRepository.findById(id).orElse(null);
}
}