gpt4 book ai didi

java - 单元测试 Spring 抛出 BeanNotOfRequiredTypeException

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:19 25 4
gpt4 key购买 nike

运行测试类会引发以下异常:

BeanNotOfRequiredTypeException: Bean named 'myServiceImpl' is expected to be of type 'MyServiceImpl' but was actually of type 'com.sun.proxy.$Proxy139'

仅在单元测试中才会引发此错误,程序本身可以正常工作。

我的界面

public interface MyService {

public String testMethod();

}

我的实现

@Service
public class MyServiceImpl implements MyService{

@Autowired
private TransactionRepository transactionRepo;

@Autowired
private AccountRepository accountRepository;

@Autowired
private BankAccountStatementFactory baStatementFactory;

public String myMethod() {
return "Run My Method";
}

}

我的单元测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class DeleteMeTest{


@Mock
private TransactionRepository transactionRepo;

@Mock
private AccountRepository accountRepository;

@Mock
private BankAccountStatementFactory baStatementFactory;

@InjectMocks
@Resource
MyServiceImpl myService;


@org.junit.Before
public void setUp() throws Exception {
// Initialize mocks created above
MockitoAnnotations.initMocks(this);
}

@Test
public void test() {
myService.myMethod();
System.out.println("My Unit Test");
}

}

运行此测试类会引发以下异常:

BeanNotOfRequiredTypeException: Bean named 'myServiceImpl' is expected to be of type 'MyServiceImpl' but was actually of type 'com.sun.proxy.$Proxy139'

这里的解决方案是将接口(interface)(而不是实现)注入(inject)到单元测试中,但这不允许我注入(inject)模拟。

那是因为 @InjectMocks 注释需要实现。当我尝试将模拟注入(inject)接口(interface)时,出现以下异常:

Cannot instantiate @InjectMocks field named 'myService'! Cause: the type 'MyService' is an interface.

需要明确的是,所有这些在一开始都有效,但在我重新打包我的类(class)后就变坏了。这可能是原因,但不能 100% 确定。

有关可能导致此 BeanNotOfRequiredTypeException 的任何提示吗?

谢谢!

最佳答案

由于这是一个单元测试,你不需要 Spring 恕我直言。

只需这样初始化测试类:

@InjectMocks
MyServiceImpl myService = new MyServiceImpl();

您还可以删除这些注释:

@RunWith(SpringRunner.class)
@SpringBootTest

关于java - 单元测试 Spring 抛出 BeanNotOfRequiredTypeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53337768/

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