gpt4 book ai didi

java - 如何模拟 DataSourceTransactionManager ?

转载 作者:行者123 更新时间:2023-11-30 08:01:50 25 4
gpt4 key购买 nike

我有以下我想模拟的代码。我基本上对模拟 DataSourceTransactionManager 感兴趣。

    @Autowired
@Qualifier("nesTransactionManager")
DataSourceTransactionManager mDataSourceTransactionManager;

...............................

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = mDataSourceTransactionManager.getTransaction(def);

try {
<-doing some DB operations here>
mDataSourceTransactionManager.commit(status);
} catch (Exception e) {
mDataSourceTransactionManager.rollback(status);
}
.............

到目前为止我已经尝试过:

    @Mock
private DataSourceTransactionManager mDataSourceTransactionManager;

@Before
public void runBeforeEachTest() {
when(mDataSourceTransactionManager.getTransaction(any(DefaultTransactionDefinition.class))).thenReturn(null);
doNothing().when(mDataSourceTransactionManager).commit(any(TransactionStatus.class));
doNothing().when(mDataSourceTransactionManager).rollback(any(TransactionStatus.class));
}

还有这个:

    @Mock
private DataSourceTransactionManager mDataSourceTransactionManager;

@Before
public void runBeforeEachTest() {
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

when(mDataSourceTransactionManager.getTransaction(eq(def))).thenReturn(null);
doNothing().when(mDataSourceTransactionManager).commit(any(TransactionStatus.class));
doNothing().when(mDataSourceTransactionManager).rollback(any(TransactionStatus.class));

但我总是遇到这个错误:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at com.nuance.entrd.mc.nes.jobs.JobPollerTest.runBeforeEachTest(JobPollerTest.java:43)

This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));

For more info see javadoc for Matchers class.

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:337)

在此上下文中没有任何意义的错误。知道如何解决这个问题吗?

谢谢

最佳答案

我解决问题的方法是使用 PowerMokito :

@RunWith(PowerMockRunner.class)
@PrepareForTest({DataSourceTransactionManager.class})
public class JobPollerTest {
.....................
private DataSourceTransactionManager mDataSourceTransactionManager;
......................

mDataSourceTransactionManager = PowerMockito.mock(DataSourceTransactionManager.class);

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

Mockito.when(mDataSourceTransactionManager.getTransaction(def)).thenReturn(null);

关于java - 如何模拟 DataSourceTransactionManager ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807920/

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