相关疑难解决方法(0)

初始化模拟对象 - MockIto

有许多方法可以使用MockIto初始化模拟对象.这些中最好的方法是什么?

1.

 public class SampleBaseTestCase {

   @Before public void initMocks() {
       MockitoAnnotations.initMocks(this);
   }
Run Code Online (Sandbox Code Playgroud)

2.

@RunWith(MockitoJUnitRunner.class)
Run Code Online (Sandbox Code Playgroud)

[编辑] 3.

mock(XXX.class);
Run Code Online (Sandbox Code Playgroud)

建议我,如果有任何其他方法比这些更好......

java junit mockito

107
推荐指数
7
解决办法
17万
查看次数

@RunWith(MockitoJUnitRunner.class)vs MockitoAnnotations.initMocks(this)

在编写新的jUnit4测试时,我想知道是否使用@RunWith(MockitoJUnitRunner.class)MockitoAnnotations.initMocks(this).

我创建了一个新测试,向导自动使用Runner生成测试.MockitoJUnitRunner的Javadocs说明如下:

与JUnit 4.4及更高版本兼容,此运行器添加了以下行为:

初始化用Mock注释的模拟,因此不需要明确使用MockitoAnnotations.initMocks(Object).在每种测试方法之前初始化模拟.验证每个测试方法后的框架使用情况.

我不清楚使用Runner是否比我过去使用的initMocks()方法有任何优势.

任何想法或链接将不胜感激!

java junit4 mockito

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

在TestClass中找不到测试你有没有忘记@Test注释?

我在运行测试时遇到这样的错误:

org.mockito.exceptions.base.MockitoException: 

No tests found in TestCase
Haven't you forgot @Test annotation?
Run Code Online (Sandbox Code Playgroud)

我当然有一个带注释的方法@Test.我究竟做错了什么?

java junit4 mockito

12
推荐指数
4
解决办法
5039
查看次数

Mockito 不能模拟这个类:接口

我在使用 mockito 和 powermock 时遇到问题,我可以使用最终静态方法来模拟抽象类,没有任何问题。当我尝试模拟接口时,WebIServerSession我得到了下面的堆栈跟踪。我查看了 powermock github repo 中的其他问题,它似乎与 jvm 版本有关。我已经升级到最新的 1.8 java 版本,如https://github.com/mockito/mockito/issues/636 中所述,但我仍然遇到相同的错误。可能与 Powermock 与 Mockito 2 的兼容性有关吗?

import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.spy;
import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
import static org.powermock.api.mockito.PowerMockito.whenNew;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

@BeforeMethod
public void setup() throws Exception {
    mockStatic(ResourceBundle.class);
    mockStatic(WebObjectsFactory.class);
    WebObjectsFactory webObjectsFactory = mock(WebObjectsFactory.class);
    WebIServerSession webIServerSession = …
Run Code Online (Sandbox Code Playgroud)

mockito powermock java-8 powermockito

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

模拟存储库 JUnit 时出现 NullPointerException

我创建了一个带有控制器、服务和存储库层的基本 Rest API。我现在正在尝试为服务层方法编写一个单元测试,该方法通过产品 ID 查找产品。但是,当我运行测试时,它在我尝试模拟存储库 findById() 方法的行中抛出 NullPointerException。

服务层的getProductById()方法如下:

public Product getProductById(String id){ return productRepository.findById(id).orElse(null); }

我的服务层测试类:

package com.product.Services;

import com.product.Entities.Product;
import com.product.Repositories.ProductRepository;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)

class ProductServiceTest {

   @InjectMocks
   ProductService productService;

   @Mock
   ProductRepository productRepository;

   @Test
   void getProductById() throws Exception {

      Product product = new Product();
      product.setId("001");
      product.setName("TV");
      product.setPrice(999.99);

      when(productRepository.findById("001").orElse(null)).thenReturn(product);
      assertEquals(product,productService.getProductById("001"));
   }
}
Run Code Online (Sandbox Code Playgroud)

附上调试器显示的图片: 在此输入图像描述

java testing rest junit

5
推荐指数
1
解决办法
7480
查看次数

Tests passing locally, but failing in git pipelines

I have a problem with Gitlab CI/CD. I am making a Java project with Gradle. When I run my tests locally, they pass. However, when I push to my git repository, the test pipeline fails. Here is the screenshot of the error it gives me: Gitlab pipeline result

This is my local test. I am using Mockito testing in SpringBoot.

package com.its.backend;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import com.its.backend.entities.User;
import com.its.backend.repositories.UserRepository;

import org.junit.jupiter.api.Test; …
Run Code Online (Sandbox Code Playgroud)

java continuous-integration mockito gradle gitlab

5
推荐指数
0
解决办法
4000
查看次数

Mockito.extension 未找到 JUnit 5 throw 方法

我正在将测试从 JUnit 4 更新到 JUnit 5 (Jupiter)。

在普通的注释改编中,例如@BeforeEach我用来@ExtendWith(MockitoExtension.class)运行 @mocks 的注释。

代码是这样的:

    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    import org.junit.jupiter.api.extension.ExtendWith;
    import org.mockito.Mock;
    import org.mockito.junit.jupiter.MockitoExtension;

    @ExtendWith(MockitoExtension.class)
    public class SomeTest {

        private static final String TEST = "test";

        @Mock
        RetailerService retailerService;
        private Delivery delivery;

        @BeforeEach
        public void setUp() {
            when(retailerService.getMessage(any(String.class))).thenReturn(TEST);
            delivery = new Delivery(retailerService);
        }

        @Test
        public void should_have_delivery() {
            assertEquals(getExpectedDeliveriesDTOs(), delivery.toDtos());
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行测试时,我收到以下错误:

java.lang.NoSuchMethodError: org.mockito.session.MockitoSessionBuilder.initMocks([Ljava/lang/Object;)Lorg/mockito/session/MockitoSessionBuilder;

我在这个评论中看到:/sf/answers/3475908411/,这个错误可能是由于junit-jupiter-api项目 POM 中的 as 依赖项和mockito-junit-jupiter.

因此,我保证为 Jupiter 导入相同的版本依赖项,但我仍然看到相同的错误。 …

java junit intellij-idea mockito junit5

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