gpt4 book ai didi

java - GraphQLTester with SpringBoot Failed to instantiate xxx specified class is 一个接口(interface)

转载 作者:行者123 更新时间:2023-12-05 05:36:19 26 4
gpt4 key购买 nike

PlayerController.java:

@Controller
public class PlayerController {


private final int MAXIMUM_CAPACITY = 12;
@Autowired
private final PlayerRepository playerRepository;


public PlayerController(PlayerRepository repository){
this.playerRepository = repository;

}

@QueryMapping
List<Player> getAllPlayers(){
List<Player> ps = new ArrayList<>();
playerRepository.findAll().forEach(ps::add);
return ps;
}

@QueryMapping
Optional<Player> playerById(@Argument Long id){
return playerRepository.findById(id);

}

@MutationMapping
Object AddPlayer(@Argument PlayerInput player){

if(playerRepository.count() >= MAXIMUM_CAPACITY)
return new PlayerFailedPayload("maximum number of players reached (" + MAXIMUM_CAPACITY + ")! Please delete players before adding more." );

if(!PlayerPosition.isValidPosition(player.position()))
return new PlayerFailedPayload("Invalid Player Position, The valid positions are: {'PG','SG','SF','PF','C'}");

if(player.name().isEmpty() || player.surname().isEmpty())
return new PlayerFailedPayload("Name or surname cannot be empty");


Player p = new Player(player.name(),player.surname(),player.position());
return new PlayerSuccessPayload("A new player was added successfully." , playerRepository.save(p));
}

@MutationMapping
Object DeletePlayer(@Argument Long id) {
Optional<Player> player = playerRepository.findById(id);

if(player.isEmpty())
return new PlayerFailedPayload("player with id " + id + " does not exist!");
playerRepository.deleteById(id);
return new PlayerSuccessPayload("Player with id " + id + " was deleted successfully",player.get());


}

record PlayerInput(String name, String surname, String position){}
record PlayerSuccessPayload(String message,Player player){}
record PlayerFailedPayload(String error){}
}

PlayerRepository.java

@Repository
public interface PlayerRepository extends CrudRepository<Player,Long> {


}

schema.graphqls:

union PlayerPayload = PlayerSuccessPayload | PlayerFailedPayload

type PlayerFailedPayload {
error: String!
}

type PlayerSuccessPayload {
message: String!
player : Player!
}

type Query {
getAllPlayers: [Player]
playerById(id: ID!): Player!
}

type Mutation{
AddPlayer(player: PlayerInput): PlayerPayload!
DeletePlayer(id : ID!): PlayerPayload!
}

input PlayerInput {
name: String!
surname: String!
position: String!
}

type Player {
id: ID!
name: String!
surname: String!
position: String!
}

PlayerControllerIntTest.java

@GraphQlTest(PlayerController.class)
@Import(PlayerRepository.class)
class PlayerControllerIntTest {


@Autowired
GraphQlTester graphQlTester;

@Test
void testGetAllPlayersShouldReturnAllPlayers() {
// language=GraphQL
String document = """
query {
getAllPlayers {
id
name
surname
position
}
}
""";

graphQlTester.document(document)
.execute()
.path("getAllPlayers")
.entityList(Player.class)
.hasSize(3);
}
}

我正在尝试编写简单的单元测试来获取所有玩家。但是无论我研究多少,我都找不到解决方案我收到此错误:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'playerController' defined in file [E:\Documents\Github\Java\basketball\basketball\target\classes\com\example\basketball\controller\PlayerController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.example.basketball.repository.PlayerRepository': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.basketball.repository.PlayerRepository]: Specified class is an interface

我尝试过的事情:

@EnableAutoConfiguration
@ContextConfiguration(classes = {PlayerRepository.class})

我在 PlayerControllerIntTest 的顶部添加了这些注释然后我得到一个不同的错误说:

java.lang.IllegalArgumentException: Unrecognized Type: org.springframework.core.ResolvableType$EmptyType@5333f08f

我的项目结构是这样的: structure

有什么帮助吗?

最佳答案

好吧,通过深入研究 spring-graphql 示例代码

我找到了解决方案。

这就像改变这个一样简单:

@GraphQlTest(PlayerController.class)
@Import(PlayerRepository.class)
class PlayerControllerIntTest {

为此:

@SpringBootTest
@AutoConfigureGraphQlTester
public class PlayerControllerIntTest {

希望对您有所帮助!

引用:https://github.com/spring-projects/spring-graphql/blob/main/samples/webmvc-http/src/test/java/io/spring/sample/graphql/repository/ArtifactRepositoriesTests.java

关于java - GraphQLTester with SpringBoot Failed to instantiate xxx specified class is 一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73326579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com