我正在尝试按功能使用包(就像这里所做的那样)。我用我的UserRepository
和UserService
接口创建了一个com.company. project.user
包,只使UserService
公开。我还有一个子包web
,其中包含UserController
和UserDto
。
在这个web
包中,我有一个测试:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureJsonTesters
public class UserDtoTest {
private JacksonTester<UserDto> tester;
@Test
public void testSerialize() throws IOException {
String id = UUID.fromString("939d1c2f-b1f4-49c6-9839-f088401f6781").toString();
String username = "wim.deblauwe";
UserRole role = UserRole.ADMIN;
JsonContent<UserDto> content = tester.write(new UserDto(id, username, role));
assertThat(content).isEqualToJson("userdto.json");
}
}
这使用Spring Boot 1.4.0。M3。当我单独运行它或在IntelliJ中运行它时,这个测试运行良好。但是,当我从Maven(版本3.3.9)运行它时,我遇到了这个问题:
$Proxy169无法访问其超接口com.company. project.user.UserRepository
堆栈跟踪的更大部分:
为了让它在Maven中也能工作,我只需要改变:
interface UserRepository extends CrudRepository<User, UserId>, UserRepositoryCustom {
Optional<User> findByUsername(String username);
}
到
public interface UserRepository extends CrudRepository<User, UserId>, UserRepositoryCustom {
Optional<User> findByUsername(String username);
}
知道我为什么需要这样做吗?这可能是Spring Data的bug吗?
这是由Spring Boot中的bug引起的。有几个解决方法:
Web环境的测试。RANDOM_PORT
或Web环境。DEFINED_PORT
with@DirtiesContext
.