标签: mockito

为Spring单元测试注入模拟@Service

我正在测试一个使用@Autowired注入服务的类:

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}
Run Code Online (Sandbox Code Playgroud)

但是如何在测试期间模拟ruleStore?我无法弄清楚如何将我的模拟RuleStore注入Spring并进入自动布线系统.

谢谢

java spring unit-testing spring-mvc mockito

18
推荐指数
2
解决办法
3万
查看次数

使用mockito操纵参数的存根方法

我有以下情况:

class Worker {  
  public Integer somework() {  
      Integer k=0;  
      Helper h= new Helper();  
      h.change(k);  
      return k;  
    }
}

class Helper {
  public void change(Integer k) {
    //k = Some calcs
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在制作unitests Worker,显然我想要模拟Helper类,以便他的change方法总是将1放入k.

我的实际情况比较复杂,但这段代码代表了问题.感谢帮助.

java methods unit-testing void mockito

18
推荐指数
3
解决办法
1万
查看次数

使用Mockitos传递参数化输入

我正在使用Mockito进行单元测试.我想知道是否可以像在Junit测试中一样发送参数化输入参数,
例如

@InjectMocks
MockClass mockClass = new MockClass();

@Test
public void mockTestMethod()
    {
    mockClass.testMethod(stringInput); 
// here I want to pass a list of String inputs 
// this is possible in Junit through Parameterized.class.. 
// wondering if its can be done in Mockito
    } 
Run Code Online (Sandbox Code Playgroud)

java unit-testing mockito

18
推荐指数
3
解决办法
1万
查看次数

在scala varargs中强制单个参数

给定一个带有两种方法的java类(取自mockito):

OngoingStubbing<T> thenReturn(T value);

OngoingStubbing<T> thenReturn(T value, T... values);
Run Code Online (Sandbox Code Playgroud)

如果我从scala调用

....thenReturn("something")
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Description Resource    Path    Location    Type
ambiguous reference to overloaded definition, both method thenReturn in trait OngoingStubbing of type (x$1: java.lang.Object, x$2: <repeated...>[java.lang.Object])org.mockito.stubbing.OngoingStubbing[java.lang.Object] and  method thenReturn in trait OngoingStubbing of type (x$1: java.lang.Object)org.mockito.stubbing.OngoingStubbing[java.lang.Object] match argument types (java.lang.String)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何解决这个问题.

scala mockito

18
推荐指数
3
解决办法
4397
查看次数

Mockito @InjectMocks如何运作?

这是我的问题:

我有几个Web服务类来测试所有从通用服务继承他们的方法.我没有为每个编写单元测试,而是认为我可以通过功能区域(即三组测试方法,每组依赖于不同的底层DAO方法调用)来打破测试套件.

我打算做的是:

@Mock StateDAO mockedStateDao;
@Mock CountyDAO mockedCountyDao;
@Mock VisitorDAO mockedVisitorDao;
Run Code Online (Sandbox Code Playgroud)

然后打电话:

@InjectMocks CountyServiceImpl<County> countyService = new CountyServiceImpl<County>();
@InjectMocks StateServiceImpl<State> stateService = new StateServiceImpl<State>();
@InjectMocks VisitorServiceImpl<Visitor> visitorService = new VisitorServiceImpl<Visitor>();
Run Code Online (Sandbox Code Playgroud)

我怎样才能确定每个mockedDAO都会注入正确的服务?是否更容易自动装配所有三个(而不是使用@InjectMocks)?

我正在使用Spring,Hibernate和Mockito ......

spring dependency-injection mockito autowired

18
推荐指数
2
解决办法
5万
查看次数

为任何整数输入参数设置模拟返回值

when(candidateService.findById(1)).thenReturn(new Candidate());
Run Code Online (Sandbox Code Playgroud)

我想为任何整数扩展此行为(不一定是1)

如果我啰嗦

when(candidateService.findById( any(Integer.class)  )).thenReturn(new Candidate());
Run Code Online (Sandbox Code Playgroud)

我有编译错误

CandidateService类型中的方法findById(Integer)不适用于参数(Matcher)

UPDATE

进口:

import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.ArrayList;
import java.util.HashSet;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
Run Code Online (Sandbox Code Playgroud)

java testing junit mockito

18
推荐指数
1
解决办法
3万
查看次数

Mockito抛出异常

@Test(expectedExceptions=DataAccessException.class)
public void testUpdateSubModuleOrderDateExceptionCheck() {
    //some code to initialize//
    UserSubModuleDao userSubModuleDao = mock(UserSubModuleDao.class);
    userModuleServiceImpl.setUserSubModuleDao(userSubModuleDao);
    UserSubModule userSubModule=new UserSubModule();
    UserSubModuleId userSubModuleId=new UserSubModuleId();
      when(userSubModuleDao.findById(any(UserSubModuleId.class),eq(false))).thenThrow(DataAccessException.class);

    userModuleServiceImpl.updateSubModuleOrder(data, moduleSysId, userId);
Run Code Online (Sandbox Code Playgroud)

我想为代码覆盖抛出Db异常.它的工作如果我给出预期的例外:Exception.class但不是DataAccessException.class

原始类中的方法如下:

public void updateSubModuleOrder(Long[] data, Long moduleSysId, Long userId) {
    try {

        for (int i = 0; i < data.length; i++) {
            SubModule subModule=new SubModule();
            subModule.setSubModuleId(data[i]);
            UserSubModuleId userSubModuleId = new UserSubModuleId();
            userSubModuleId.setSubModuleId(subModule);
            userSubModuleId.setUserId(userId);
            userSubModuleId.setUserModuleId(moduleSysId);
            UserSubModule userSubmodule = new UserSubModule();
            userSubmodule = userSubModuleDao.findById(userSubModuleId,
                    false);
catch (DataAccessException ewmsDataExp) {
        LOGGER.error(
                "Database Exception while updateSubModuleOrder …
Run Code Online (Sandbox Code Playgroud)

java testng exception spring-mvc mockito

18
推荐指数
3
解决办法
5万
查看次数

Mockito间谍 - 在调用构造函数之前存根

我正在试图窥探一个Object,我想在构造函数调用之前存根一个由构造函数调用的方法.
我的班级看起来像这样:

public class MyClass {
    public MyClass() {
         setup();
    }

    public void setup() {

    }
}
Run Code Online (Sandbox Code Playgroud)

不得调用安装方法.那么,我如何监视这个方法(和存根设置,以便它什么都不做)?
它可以很好地模拟方法,但我想进行单元测试MyClass,所以我需要其他方法.


之所以需要存根设置方法以便它什么都不做:
我正在编写一个乐高机器人(lejos)并且我在设置中放置了一些机器人需要工作的代码.但是,当我在TinyVM(安装在机器人上的VM)之外调用它时,java崩溃,因为VM尚未正确初始化(因为测试在我的PC上运行).对于单元测试,设置并不重要.
我不能存根类/方法设置调用,因为它们中的一些是公共静态最终变量.

java unit-testing mocking mockito spy

18
推荐指数
3
解决办法
2万
查看次数

在Android单元测试中模拟改造Observable <T>响应

我有一个API接口,我正在测试View涉及网络调用.

@Config(emulateSdk = 18)
public class SampleViewTest extends RobolectricTestBase {

    ServiceApi apiMock;

    @Inject
    SampleView fixture;

    @Override
    public void setUp() {
        super.setUp(); //injection is performed in super
        apiMock = mock(ServiceApi.class);
        fixture = new SampleView(activity);
        fixture.setApi(apiMock);
    }

    @Test
    public void testSampleViewCallback() {
        when(apiMock.requestA()).thenReturn(Observable.from(new ResponseA());
        when(apiMock.requestB()).thenReturn(Observable.from(new ResponseB());

        AtomicReference<Object> testResult = new AtomicReference<>();
        fixture.updateView(new Callback() {

            @Override
            public void onSuccess(Object result) {
                testResult.set(result);
            }

            @Override
            public void onError(Throwable error) {
                throw new RuntimeException(error);
            }
        });

        verify(apiMock, times(1)).requestA();
        verify(apiMock, times(1)).requestB();

        assertNotNull(testResult.get());
    }
} …
Run Code Online (Sandbox Code Playgroud)

android unit-testing mockito robolectric retrofit

18
推荐指数
1
解决办法
8775
查看次数

你如何模拟JavaFX工具包初始化?

[序言:道歉,这里有很多代码,其中一些可能与这个问题无关,而一些理解问题所必需的代码可能会丢失; 请评论,我会相应地编辑问题.]

环境:Ubuntu 14.10 x86_64; Oracle JDK 1.8u25.单元测试库是TestNG,版本6.8.13; Mockito是版本1.10.17.

在我的GUI应用程序中,JavaFX称之为"控制器"的东西是非常被动的,因为这个"控制器"(我称之为"显示器")真正做的唯一事情就是发送事件.

现在,当收到需要GUI更新的事件时,它是另一个类,我称之为视图,它负责更新GUI.简而言之:

显示 - >演示者 - >视图 - >显示

我有两个单元测试:

  • 显示 - >主持人;
  • 主持人 - >查看.

所以,我在这方面已经被覆盖了(我可以改变显示器的优势,这就是我这样做的原因).

但现在我尝试测试"视图 - >显示"部分; 我是SOL.

作为说明,这里是视图类:

@NonFinalForTesting
public class JavafxTreeTabView
    extends JavafxView<TreeTabPresenter, TreeTabDisplay>
    implements TreeTabView
{
    private final BackgroundTaskRunner taskRunner;

    public JavafxTreeTabView(final BackgroundTaskRunner taskRunner)
        throws IOException
    {
        super("/tabs/treeTab.fxml");
        this.taskRunner = taskRunner;
    }

    JavafxTreeTabView(final BackgroundTaskRunner taskRunner,
        final Node node, final TreeTabDisplay display)
    {
        super(node, display);
        this.taskRunner = taskRunner;
    }


    @Override
    public void loadTree(final ParseNode rootNode)
    { …
Run Code Online (Sandbox Code Playgroud)

java testng unit-testing javafx mockito

18
推荐指数
1
解决办法
3160
查看次数