mockito JUnit测试返回Flux的方法< String>

irlmq6kh  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(220)

下面正在测试的服务层中的方法...:

@Service 
public class Service{

public Flux<String> methodBeingTested ()  {

Flux<String> fluxOfTypeString = Flux.just("test");

return fluxOfTypeString;
}
}

字符串
JUnit测试:

@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {

@InjectMocks
Service service;

@Mock
Utility Util;     
      
 @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

   @Test
    public void test() {

        Flux<String> fluxOfTypeString = Flux.just("test"); 

       when(service.methodToTest()).thenReturn(fluxOfTypeString);
}


在安装模式下,我得到以下错误:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
FluxJust cannot be returned by toString()
toString() should return String


当不在调试模式下时,我得到以下错误:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.


有什么想法,这是一个可能的变通办法是什么?任何帮助将不胜感激。

yhuiod9q

yhuiod9q1#

莫奇托在告诉你问题所在。
在没有任何其他证据的情况下,你似乎在试图嘲笑一个真实的物体。
如果你的意图是覆盖和模拟一个特定的方法,你可能需要在一个匹配该签名的接口上创建一个mock,或者在该对象上创建一个spy
第二部分表示when() requires an argument which has to be a method call on a mock,这就是它所说的。

nszi6y05

nszi6y052#

你根本不需要Mockito来测试methodToTest(),因为没有第三方类(比如你在ServiceTest中模仿的Utility)被调用:

import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;

class MyTest {

    private Service service = new Service();

    @Test
    void name() {    
        Flux<String> actual = service.methodToTest();

        StepVerifier.create(actual)
                .expectNext("test")
                .verifyComplete();
    }
}

字符串
有关测试React流的更多信息,请参阅本文:https://www.baeldung.com/reactive-streams-step-verifier-test-publisher

相关问题