关于java:Java测试框架推荐

7次阅读

共计 3858 个字符,预计需要花费 10 分钟才能阅读完成。

  • Java 测试框架介绍

java 有很多测试类框架, 开发中有很多比方 Mokito, powermock, wiremock, cucumber , 然而 powermock 测试,sonar 不认其覆盖率.

Mockito
What is mock
Mocking is primarily used in unit testing. An object under test may have dependencies on other (complex) objects. To isolate the behavior of the object you want to replace the other objects by mocks that simulate the behavior of the real objects. This is useful if the real objects are impractical to incorporate into the unit test.

From https://stackoverflow.com/que…

以下所有的例子以下图为根据,写 UserImp 的 UT UserImplTest

Import mockito
//build.gradlew
repositories {jcenter() }
dependencies {

testCompile "org.mockito:mockito-core:2.+" 
// https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'

}

// 遇到以下谬误须要导入

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)

at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:74)
at com.sun.proxy.$Proxy8.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:240)
at org.mockito.internal.creation.MockSettingsImpl.build(MockSettingsImpl.java:228)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:61)
at org.mockito.Mockito.mock(Mockito.java:1908)

Mock and injectMock
@Mock 用来 mock 独立没有依赖的类
@InjectMock 用于去 mock 有依赖的类
For dependent classes, we used mocks.
From https://howtodoinjava.com/moc…

import com.kaifei.model.User;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

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

public class UserImplTest {

@Mock
UserHandler userHandler;

@InjectMocks
UserImpl userImpl;

@Before
public void before()
{
    //Initializes objects annotated with Mockito annotations for given testClass: @Mock, @Spy, @Captor, @InjectMocks
    //See examples in javadoc for MockitoAnnotations class.
    MockitoAnnotations.initMocks(this);
}

@Test
public void testGetAllUser()
{
    //given
    User james = new User("james", 23);
    ArrayList<User> objects = new ArrayList<>();
    objects.add(james);
    Mockito.when(userHandler.getAll()).thenReturn(objects);

    //when
    List<User> actUsers = userImpl.getaAllUsers();

    //then
    Assert.assertEquals("get all done!", objects, actUsers);
}

}
mock 办法的返回值
Mockito.when(sharingDataHandler.createSharingData()).thenReturn(sharingUuid);
Mock 办法被执行了一次
用来测 void 办法

@Test
public void testCreateUser200()
{
    //given
    User james = new User("james", 23);

    //when
    userImpl.creatUser(james);

    //then verify the UserHandler::createUser was executed only once
    Mockito.verify(userHandler, Mockito.times(1)).createUser(james);
}

Mock throw exception
@Test(expected = NullPointerException.class)

public void testCreatUser()
{
    //given
    User james = new User("james", 23);
    
    //when
    userImpl.creatUser(james);
    
    //then
    //catch NullPointerException exception
}

RabbitMQ clear Message
@Autowired
private MessageCollector messageCollector;
@After(“@CleanAllMessages”)
public final void cleanAllMessages()
{
try
{
mockMvc.perform(
delete(“/messages/”).contentType(MediaType.APPLICATION_JSON_UTF8_VALUE).content(“[]”));
messageCollector.forChannel(messageSource.statusmessageChannel()).clear();
}
catch (Exception e)
{
throw new CucumberException(“Stopped at “user invokes root cleanAllMessages:””, e);
}
}
Cucumber
cucum 是 BDD 测试框架的一个工具, 可能测试组件与组件之间的 API 调用, service 里 API 的测试

https://cloud.tencent.com/dev…

WireMock
Mock your APIs for fast, robust and comprehensive testing
WireMock is a simulator for HTTP-based APIs. Some might consider it a service virtualization tool or a mock server.

It enables you to stay productive when an API you depend on doesn’t exist or isn’t complete. It supports testing of edge cases and failure modes that the real API won’t reliably produce. And because it’s fast it can reduce your build time from hours down to minutes.
wireMock site
http://wiremock.org/

本文由博客群发一文多发等经营工具平台 OpenWrite 公布

正文完
 0