有许多方法可以使用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)
建议我,如果有任何其他方法比这些更好......
在编写新的jUnit4测试时,我想知道是否使用@RunWith(MockitoJUnitRunner.class) 或MockitoAnnotations.initMocks(this).
我创建了一个新测试,向导自动使用Runner生成测试.MockitoJUnitRunner的Javadocs说明如下:
与JUnit 4.4及更高版本兼容,此运行器添加了以下行为:
初始化用Mock注释的模拟,因此不需要明确使用MockitoAnnotations.initMocks(Object).在每种测试方法之前初始化模拟.验证每个测试方法后的框架使用情况.
我不清楚使用Runner是否比我过去使用的initMocks()方法有任何优势.
任何想法或链接将不胜感激!
我在运行测试时遇到这样的错误:
org.mockito.exceptions.base.MockitoException:
No tests found in TestCase
Haven't you forgot @Test annotation?
Run Code Online (Sandbox Code Playgroud)
我当然有一个带注释的方法@Test.我究竟做错了什么?
我在使用 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) 我创建了一个带有控制器、服务和存储库层的基本 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)
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) 我正在将测试从 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 导入相同的版本依赖项,但我仍然看到相同的错误。 …