Browse Source

重构单元测试代码

master
Daniel Qian 10 years ago
parent
commit
771ddef37e
9 changed files with 309 additions and 206 deletions
  1. +28
    -5
      pom.xml
  2. +29
    -0
      src/test/java/chanjarster/weixin/api/ApiTestModule.java
  3. +113
    -0
      src/test/java/chanjarster/weixin/api/WxBaseAPITest.java
  4. +30
    -0
      src/test/java/chanjarster/weixin/api/WxCustomMessageAPITest.java
  5. +86
    -0
      src/test/java/chanjarster/weixin/api/WxMenuAPITest.java
  6. +0
    -5
      src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java
  7. +0
    -195
      src/test/java/chanjarster/weixin/api/WxServiceTest.java
  8. +1
    -1
      src/test/java/chanjarster/weixin/bean/WxMenuTest.java
  9. +22
    -0
      src/test/resources/testng.xml

+ 28
- 5
pom.xml View File

@@ -26,11 +26,11 @@
<artifactId>fluent-hc</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
@@ -63,10 +63,33 @@
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>


</project>

+ 29
- 0
src/test/java/chanjarster/weixin/api/ApiTestModule.java View File

@@ -0,0 +1,29 @@
package chanjarster.weixin.api;

import java.io.InputStream;

import javax.xml.bind.JAXBException;

import chanjarster.weixin.api.WxBaseAPITest.WxXmlConfigStorage;
import chanjarster.weixin.util.xml.XmlTransformer;

import com.google.inject.Binder;
import com.google.inject.Module;

public class ApiTestModule implements Module {

@Override
public void configure(Binder binder) {
try {
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml");
WxXmlConfigStorage config = XmlTransformer.fromXml(WxXmlConfigStorage.class, is1);
WxServiceImpl wxService = new WxServiceImpl();
wxService.setWxConfigStorage(config);

binder.bind(WxServiceImpl.class).toInstance(wxService);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}

}

+ 113
- 0
src/test/java/chanjarster/weixin/api/WxBaseAPITest.java View File

@@ -0,0 +1,113 @@
package chanjarster.weixin.api;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import chanjarster.weixin.bean.result.WxMediaUploadResult;
import chanjarster.weixin.exception.WxErrorException;

import com.google.inject.Inject;

@Test(groups="baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxBaseAPITest {

@Inject
protected WxServiceImpl wxService;

private List<String> media_ids = new ArrayList<String>();
@Test
public void testRefreshAccessToken() throws WxErrorException {
WxConfigStorage configStorage = wxService.wxConfigStorage;
String before = configStorage.getAccessToken();
wxService.refreshAccessToken();
String after = configStorage.getAccessToken();
Assert.assertNotEquals(before, after);
Assert.assertTrue(StringUtils.isNotBlank(after));
}
@Test(dependsOnMethods = { "testRefreshAccessToken" }, dataProvider="uploadMedia", enabled = true)
public void testUploadMedia(String mediaType, String fileType, String fileName) throws WxErrorException, IOException {
InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName);
WxMediaUploadResult res = wxService.uploadMedia(mediaType, fileType, inputStream);
Assert.assertNotNull(res.getType());
Assert.assertNotNull(res.getCreated_at());
Assert.assertTrue(res.getMedia_id() != null || res.getThumb_media_id() != null);
if (res.getMedia_id() != null) {
media_ids.add(res.getMedia_id());
}
if (res.getThumb_media_id() != null) {
media_ids.add(res.getThumb_media_id());
}
}
@DataProvider
public Object[][] uploadMedia() {
return new Object[][] {
new Object[] { WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, "mm.jpeg" },
new Object[] { WxConsts.MEDIA_VOICE, WxConsts.FILE_MP3, "mm.mp3" },
new Object[] { WxConsts.MEDIA_VIDEO, WxConsts.FILE_MP4, "mm.mp4" },
new Object[] { WxConsts.MEDIA_THUMB, WxConsts.FILE_JPG, "mm.jpeg" }
};
}
@Test(dependsOnMethods = { "testUploadMedia" }, dataProvider="downloadMedia")
public void testDownloadMedia(String media_id) throws WxErrorException {
wxService.downloadMedia(media_id);
}
@DataProvider
public Object[][] downloadMedia() {
Object[][] params = new Object[this.media_ids.size()][];
for (int i = 0; i < this.media_ids.size(); i++) {
params[i] = new Object[] { this.media_ids.get(i) };
}
return params;
}
@Test(enabled = true)
public void testCheckSignature() throws WxErrorException {
String timestamp = "23234235423246";
String nonce = "y7didfkcmvnbd90sdofjkiefhsd";
String signature = "77b6651628dfb9a64bfb0d3432ee053ac566a459";
Assert.assertTrue(wxService.checkSignature(timestamp, nonce, signature));
}
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
public static class WxXmlConfigStorage extends WxInMemoryConfigStorage {
protected String openId;
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
@Override
public String toString() {
return "SimpleWxConfigProvider [appId=" + appId + ", secret=" + secret + ", accessToken=" + accessToken
+ ", expiresIn=" + expiresIn + ", token=" + token + ", openId=" + openId + "]";
}
}
}

+ 30
- 0
src/test/java/chanjarster/weixin/api/WxCustomMessageAPITest.java View File

@@ -0,0 +1,30 @@
package chanjarster.weixin.api;

import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import com.google.inject.Inject;

import chanjarster.weixin.api.WxBaseAPITest.WxXmlConfigStorage;
import chanjarster.weixin.bean.WxCustomMessage;
import chanjarster.weixin.exception.WxErrorException;

@Test(dependsOnGroups="baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxCustomMessageAPITest {

@Inject
protected WxServiceImpl wxService;
@Test(enabled = true)
public void testSendCustomMessage() throws WxErrorException {
WxXmlConfigStorage configProvider = (WxXmlConfigStorage) wxService.wxConfigStorage;
WxCustomMessage message = new WxCustomMessage();
message.setMsgtype(WxConsts.CUSTOM_MSG_TEXT);
message.setTouser(configProvider.getOpenId());
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");

wxService.sendCustomMessage(message);
}
}

+ 86
- 0
src/test/java/chanjarster/weixin/api/WxMenuAPITest.java View File

@@ -0,0 +1,86 @@
package chanjarster.weixin.api;

import javax.xml.bind.JAXBException;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;

import com.google.inject.Inject;

import chanjarster.weixin.bean.WxMenu;
import chanjarster.weixin.bean.WxMenu.WxMenuButton;
import chanjarster.weixin.exception.WxErrorException;

@Test(dependsOnGroups="baseAPI")
@Guice(modules = ApiTestModule.class)
public class WxMenuAPITest {

@Inject
protected WxServiceImpl wxService;
@Test(dataProvider = "menu", enabled = true)
public void testCreateMenu(WxMenu wxMenu) throws WxErrorException {
wxService.createMenu(wxMenu);
}
@Test(dependsOnMethods = { "testCreateMenu"}, enabled = true)
public void testGetMenu() throws WxErrorException {
Assert.assertNotNull(wxService.getMenu());
}
@Test(dependsOnMethods = { "testGetMenu"}, enabled = true)
public void testDeleteMenu() throws WxErrorException {
wxService.deleteMenu();
}
@DataProvider(name="menu")
public Object[][] getMenu() throws JAXBException {
WxMenu menu = new WxMenu();
WxMenuButton button1 = new WxMenuButton();
button1.setType("click");
button1.setName("今日歌曲");
button1.setKey("V1001_TODAY_MUSIC");
WxMenuButton button2 = new WxMenuButton();
button2.setType("click");
button2.setName("歌手简介");
button2.setKey("V1001_TODAY_SINGER");
WxMenuButton button3 = new WxMenuButton();
button3.setName("菜单");
menu.getButton().add(button1);
menu.getButton().add(button2);
menu.getButton().add(button3);
WxMenuButton button31 = new WxMenuButton();
button31.setType("view");
button31.setName("搜索");
button31.setUrl("http://www.soso.com/");
WxMenuButton button32 = new WxMenuButton();
button32.setType("view");
button32.setName("视频");
button32.setUrl("http://v.qq.com/");
WxMenuButton button33 = new WxMenuButton();
button33.setType("click");
button33.setName("赞一下我们");
button33.setKey("V1001_GOOD");
button3.getSub_button().add(button31);
button3.getSub_button().add(button32);
button3.getSub_button().add(button33);
return new Object[][] {
new Object[] {
menu
}
};
}
}

+ 0
- 5
src/test/java/chanjarster/weixin/api/WxMessageRouterTest.java View File

@@ -46,11 +46,6 @@ public class WxMessageRouterTest {
Assert.assertEquals(sb.toString(), expected);
}
@Test()
public void test() {
}
@DataProvider(name="messages-1")
public Object[][] messages2() {
WxXmlMessage message1 = new WxXmlMessage();


+ 0
- 195
src/test/java/chanjarster/weixin/api/WxServiceTest.java View File

@@ -1,195 +0,0 @@
package chanjarster.weixin.api;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang3.StringUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import chanjarster.weixin.bean.WxCustomMessage;
import chanjarster.weixin.bean.WxMenu;
import chanjarster.weixin.bean.WxMenu.WxMenuButton;
import chanjarster.weixin.bean.result.WxMediaUploadResult;
import chanjarster.weixin.exception.WxErrorException;
import chanjarster.weixin.util.xml.XmlTransformer;

public class WxServiceTest {

private WxServiceImpl wxService;
private List<String> media_ids = new ArrayList<String>();
@BeforeTest
public void prepare() throws JAXBException {
this.wxService = null;
InputStream is1 = ClassLoader.getSystemResourceAsStream("test-config.xml");
WxXmlConfigStorage config = XmlTransformer.fromXml(WxXmlConfigStorage.class, is1);
this.wxService = new WxServiceImpl();
this.wxService.setWxConfigStorage(config);
}
@Test()
public void testRefreshAccessToken() throws WxErrorException {
WxConfigStorage configStorage = wxService.wxConfigStorage;
String before = configStorage.getAccessToken();
wxService.refreshAccessToken();
String after = configStorage.getAccessToken();
Assert.assertNotEquals(before, after);
Assert.assertTrue(StringUtils.isNotBlank(after));
}
@Test(dependsOnMethods = "testRefreshAccessToken", enabled = true)
public void sendCustomMessage() throws WxErrorException {
WxXmlConfigStorage configProvider = (WxXmlConfigStorage) wxService.wxConfigStorage;
WxCustomMessage message = new WxCustomMessage();
message.setMsgtype(WxConsts.CUSTOM_MSG_TEXT);
message.setTouser(configProvider.getOpenId());
message.setContent("欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>");

wxService.sendCustomMessage(message);
}
@Test(dataProvider = "menu", dependsOnMethods = "testRefreshAccessToken", enabled = true)
public void testCreateMenu(WxMenu wxMenu) throws WxErrorException {
wxService.createMenu(wxMenu);
}
@Test(dependsOnMethods = { "testRefreshAccessToken" , "testCreateMenu"}, enabled = true)
public void testGetMenu() throws WxErrorException {
Assert.assertNotNull(wxService.getMenu());
}
@Test(dependsOnMethods = { "testRefreshAccessToken", "testGetMenu"}, enabled = true)
public void testDeleteMenu() throws WxErrorException {
wxService.deleteMenu();
}
@Test(dependsOnMethods = { "testRefreshAccessToken" }, dataProvider="uploadMedia", enabled = true)
public void testUploadMedia1(String mediaType, String fileType, String fileName) throws WxErrorException, IOException {
InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName);
WxMediaUploadResult res = wxService.uploadMedia(mediaType, fileType, inputStream);
Assert.assertNotNull(res.getType());
Assert.assertNotNull(res.getCreated_at());
Assert.assertTrue(res.getMedia_id() != null || res.getThumb_media_id() != null);
if (res.getMedia_id() != null) {
media_ids.add(res.getMedia_id());
}
if (res.getThumb_media_id() != null) {
media_ids.add(res.getThumb_media_id());
}
}
@DataProvider
public Object[][] uploadMedia() {
return new Object[][] {
new Object[] { WxConsts.MEDIA_IMAGE, WxConsts.FILE_JPG, "mm.jpeg" },
new Object[] { WxConsts.MEDIA_VOICE, WxConsts.FILE_MP3, "mm.mp3" },
new Object[] { WxConsts.MEDIA_VIDEO, WxConsts.FILE_MP4, "mm.mp4" },
new Object[] { WxConsts.MEDIA_THUMB, WxConsts.FILE_JPG, "mm.jpeg" }
};
}
@Test(dependsOnMethods = { "testUploadMedia1" }, dataProvider="downloadMedia")
public void testDownloadMedia(String media_id) throws WxErrorException {
wxService.downloadMedia(media_id);
}
@DataProvider
public Object[][] downloadMedia() {
Object[][] params = new Object[this.media_ids.size()][];
for (int i = 0; i < this.media_ids.size(); i++) {
params[i] = new Object[] { this.media_ids.get(i) };
}
return params;
}
@Test(enabled = true)
public void testCheckSignature() throws WxErrorException {
String timestamp = "23234235423246";
String nonce = "y7didfkcmvnbd90sdofjkiefhsd";
String signature = "77b6651628dfb9a64bfb0d3432ee053ac566a459";
Assert.assertTrue(wxService.checkSignature(timestamp, nonce, signature));
}
@DataProvider(name="menu")
public Object[][] getMenu() throws JAXBException {
WxMenu menu = new WxMenu();
WxMenuButton button1 = new WxMenuButton();
button1.setType("click");
button1.setName("今日歌曲");
button1.setKey("V1001_TODAY_MUSIC");
WxMenuButton button2 = new WxMenuButton();
button2.setType("click");
button2.setName("歌手简介");
button2.setKey("V1001_TODAY_SINGER");
WxMenuButton button3 = new WxMenuButton();
button3.setName("菜单");
menu.getButton().add(button1);
menu.getButton().add(button2);
menu.getButton().add(button3);
WxMenuButton button31 = new WxMenuButton();
button31.setType("view");
button31.setName("搜索");
button31.setUrl("http://www.soso.com/");
WxMenuButton button32 = new WxMenuButton();
button32.setType("view");
button32.setName("视频");
button32.setUrl("http://v.qq.com/");
WxMenuButton button33 = new WxMenuButton();
button33.setType("click");
button33.setName("赞一下我们");
button33.setKey("V1001_GOOD");
button3.getSub_button().add(button31);
button3.getSub_button().add(button32);
button3.getSub_button().add(button33);
return new Object[][] {
new Object[] {
menu
}
};
}
@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
public static class WxXmlConfigStorage extends WxInMemoryConfigStorage {
protected String openId;
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
@Override
public String toString() {
return "SimpleWxConfigProvider [appId=" + appId + ", secret=" + secret + ", accessToken=" + accessToken
+ ", expiresIn=" + expiresIn + ", token=" + token + ", openId=" + openId + "]";
}
}
}

+ 1
- 1
src/test/java/chanjarster/weixin/bean/WxMenuTest.java View File

@@ -57,7 +57,7 @@ public class WxMenuTest {
Assert.assertEquals(menu.toJson(), json);
}
@Test(dataProvider="wxReturnMenu")
@DataProvider
public Object[][] wxReturnMenu() {
Object[][] res = menuJson();
String json = "{ \"menu\" : " + res[0][0] + " }";


+ 22
- 0
src/test/resources/testng.xml View File

@@ -0,0 +1,22 @@
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Weixin-java-tool-suite" verbose="1">
<test name="API_Test">
<classes>
<class name="chanjarster.weixin.api.WxBaseAPITest" />
<class name="chanjarster.weixin.api.WxCustomMessageAPITest" />
<class name="chanjarster.weixin.api.WxMenuAPITest" />
<class name="chanjarster.weixin.api.WxMessageRouterTest" />
</classes>
</test>

<test name="Util_Test">
<classes>
<class name="chanjarster.weixin.bean.WxAccessTokenTest" />
<class name="chanjarster.weixin.bean.WxCustomMessageTest" />
<class name="chanjarster.weixin.bean.WxErrorTest" />
<class name="chanjarster.weixin.bean.WxMenuTest" />
<class name="chanjarster.weixin.bean.WxXmlMessageTest" />
</classes>
</test>
</suite>

Loading…
Cancel
Save