标签: mockito

为什么我不能在使用Maven的Junit测试运行中访问src/test/resources?

我在运行以下代码时遇到问题:

configService.setMainConfig("src/test/resources/MainConfig.xml");
Run Code Online (Sandbox Code Playgroud)

来自Junit @Before方法.

这是Maven构建其目标文件夹的方式吗?

java junit4 mockito

45
推荐指数
2
解决办法
7万
查看次数

单元测试中的计数方法调用

在单元测试中计算方法调用的最佳方法是什么.任何测试框架都允许这样做吗?

unit-testing jmockit junit4 mockito

45
推荐指数
6
解决办法
5万
查看次数

使用Mockito将Class <T>作为参数的方法存根

有一个通用的方法,将类作为参数,我有问题与Mockito存根.该方法如下所示:

public <U extends Enum<U> & Error, T extends ServiceResponse<U>> T validate(
    Object target, Validator validator, Class<T> responseClass,
    Class<U> errorEnum);
Run Code Online (Sandbox Code Playgroud)

这真是可怕,至少对我而言......我可以想象没有它的生活,但代码库的其余部分愉快地使用它......

在我的单元测试中,我打算将此方法存根以返回一个新的空对象.但是我如何用mockito做到这一点?我试过了:

when(serviceValidatorStub.validate(
    any(), 
    isA(UserCommentRequestValidator.class), 
    UserCommentResponse.class, 
    UserCommentError.class)
).thenReturn(new UserCommentResponse());
Run Code Online (Sandbox Code Playgroud)

但由于我正在混合和匹配匹配器和原始值,我得到"org.mockito.exceptions.misusing.InvalidUseOfMatchersException:无效使用参数匹配器!"

java generics class mocking mockito

44
推荐指数
1
解决办法
6万
查看次数

如何使用Mockito验证未使用任何参数组合调用的模拟方法

如何使用Mockito验证模拟方法根本没有被调用 - 使用任何参数组合?

例如,我有一个对象 - myObject使用第二个模拟对象 - myMockedOtherObject有一个方法 - someMethodOrOther(String parameter1, String parameter2).

我想调用myObject.myMethod()并验证someMethodOrOther() 不会被调用 - 使用任何参数组合.

例如:

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther();
Run Code Online (Sandbox Code Playgroud)

除非我不能这样做,因为someMethodOrOther()需要提供特定的参数.

java unit-testing mocking mockito

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

用Mockito模拟局部范围对象的方法

我需要一些帮助:

例:

void method1{
    MyObject obj1=new MyObject();
    obj1.method1();
}
Run Code Online (Sandbox Code Playgroud)

我想obj1.method1()在我的测试中模拟,但要透明,所以我不想制作和更改代码.在Mockito有什么办法吗?

mocking local object mockito

42
推荐指数
4
解决办法
9万
查看次数

如何验证方法是否通过mockito从具有相同类的其他方法调用

我想测试一些在同一个类中调用其他人的方法.它基本上是相同的方法,但参数较少,因为数据库中有一些默认值.我在这上面展示

public class A{
    Integer quantity;
    Integer price;        

    A(Integer q, Integer v){
        this quantity = q;
        this.price = p;
    }

    public Float getPriceForOne(){
        return price/quantity;
    }

    public Float getPrice(int quantity){
        return getPriceForOne()*quantity;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我想测试是否在调用方法getPrice(int)时调用了方法getPriceForOne().基本上调用普通方法getPrice(int)和mock getPriceForOne.

import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
....

public class MyTests {
    A mockedA = createMockA();

    @Test
    public void getPriceTest(){
        A a = new A(3,15);
        ... test logic of method without mock ...

        mockedA.getPrice(2);
        verify(mockedA, times(1)).getPriceForOne();
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑一下,我有一个更复杂的文件,这个文件是其他人的实用工具,必须全部在一个文件中.

java mockito

41
推荐指数
1
解决办法
4万
查看次数

无法在Spring MVC Controller测试中模拟Service类

我有一个Spring 3.2 MVC应用程序,并使用Spring MVC测试框架来测试我的控制器操作的GET和POST请求.我正在使用Mockito来模拟服务,但我发现模拟被忽略了,而且我的实际服务层正被使用(因此,数据库正在被击中).

我的Controller测试中的代码:

package name.hines.steven.medical_claims_tracker.controllers;

import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
import name.hines.steven.medical_claims_tracker.domain.Policy;
import name.hines.steven.medical_claims_tracker.services.PolicyService;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({ "classpath:/applicationContext.xml", "classpath:/tests_persistence-applicationContext.xml" })
public class PolicyControllerTest {

    @Mock
    PolicyService service;

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setup() …
Run Code Online (Sandbox Code Playgroud)

java spring mocking spring-mvc mockito

41
推荐指数
4
解决办法
8万
查看次数

如何使用power mockito调用静态void方法

我使用以下内容.

Powermock-mockito 1.5.12
Mockito 1.95
junit 4.11
Run Code Online (Sandbox Code Playgroud)

这是我的utils类

public void InternalUtils {
    public static void sendEmail(String from, String[] to, String msg, String body) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这是被测试班级的要点:

public class InternalService {
       public void processOrder(Order order) {
           if (order.isSuccessful()) {
               InternalUtils.sendEmail(...);
           }
       }
}
Run Code Online (Sandbox Code Playgroud)

以下是测试:

@PrepareForTest({InternalUtils.class})
@RunWith(PowerMockRunner.class)
public class InternalService {
   public void verifyEmailSend() {
        mockStatic(Internalutils.class);
        doNothing().when(InternalUtils, "sendEmail", anyString(), any(String.class), anyString(), anyString());
        Order order = mock(Order.class);
        when(order.isSuccessful()).thenReturn(true);
        InternalService is = new InternalService();

        verifyStatic(times(1));
        is.processOrder(order);
   }
}
Run Code Online (Sandbox Code Playgroud)

上述测试失败.给出的验证模式为none,但根据代码,如果订单成功,则必须发送电子邮件.

java static-methods unit-testing mockito

41
推荐指数
2
解决办法
8万
查看次数

在使用@Retention,@ Transaction,@ Inherited对服务进行注释测试后,TestNG单元测试无法正常工作

我正在使用TestNG测试业务服务,在春季启动应用程序中进行模拟单元测试.

应用程序是多模块弹簧启动项目.我正在为业务模块编写单元测试.

我在pom中添加了以下依赖关系测试,

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
   <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>${testng.version}</version>
    <scope>test</scope>
 </dependency>
 <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <scope>test</scope>
 </dependency>
 <dependency>
     <groupId>org.hsqldb</groupId>
     <artifactId>hsqldb</artifactId>
     <scope>test</scope>
 </dependency>
 <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-validator</artifactId>
     <scope>test</scope>
 </dependency>
 <dependency>
     <groupId>javax.el</groupId>
     <artifactId>el-api</artifactId>
     <version>${javaxel.version}</version>
     <scope>test</scope>
 </dependency>
 <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.servlet</artifactId>
      <version>${javax.servlet.version}</version>
      <scope>test</scope>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

我的包装器注释看起来像

@Service
@Transactional
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface MyServiceAnnotation{}
Run Code Online (Sandbox Code Playgroud)

我的TestApp看起来像

@SpringBootApplication
public class TestApp{ .... }
Run Code Online (Sandbox Code Playgroud)

我的商业服务看起来像

@MyServiceAnnotation
public class AddressServiceImpl implements AddressService {
       @Autowire
       UserDAO userDAO;
       @Autowire
       AddressDAO addressDAO;

       public Address find(int userId) …
Run Code Online (Sandbox Code Playgroud)

java testng unit-testing mockito spring-boot

40
推荐指数
1
解决办法
1653
查看次数

Mockito可以验证参数是否具有某些属性/字段?

说我在嘲笑这门课 Foo

class Foo {
  public void doThing(Bar bar) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

这是 Bar

class Bar {
  private int i;
  public int getI() { return i; }
  public void setI(int i) { this.i = i; }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Mockito的验证功能来查看是否Foo#doThing(Bar)在具有特定实例Bar或任何 Barwith 的模拟上调用Mockito.any(Bar.class),但是有没有办法确保它被任何调用Bar但具有特定值i或者Bar#getI()

我所知道的可能是:

Foo mockedFoo = mock(Foo.class);
Bar someBar = mock(Bar.class);
...
verify(mockedFoo).doThing(someBar);
verify(mockedFoo).doThing(any(Bar.class);
Run Code Online (Sandbox Code Playgroud)

我想知道的是,是否有办法验证一个Bar关于它的特定事物是否作为参数传递.

java unit-testing mocking mockito

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