システム操作
我々は、すべての断片化されたセルフテスト個々のマイクロのサービスをしている前に、それから、私たちはすべてのサービスモジュールFBIのテストを必要とするので、長い符号化後、私たちのメインモジュールは、実質的に、完成された、のは、それをやってみましょう。
クリアテストデータ&テスト・ファイル
私たちは、様々なサービスを実装するプロセスであり、結果の私たちの究極のディスプレイに影響を与えないためには、テストファイルおよび試験データの多くを追加、我々はまず、過去のデータ前にクリーンアップします。
drop database advertisement;
我々はまだフライウェイを使用してテストデータを追加します。
INSERT INTO `ad_user` VALUES (10,'Isaac','B2E56F2420D73FEC125D2D51641C5713',1,'2019-08-14 20:29:01','2019-08-14 20:29:01');
INSERT INTO `ad_creative` VALUES (10,'第一个创意',1,1,720,1080,1024,0,1,10,'https://www.life-runner.com','2019-08-14 21:31:31','2019-08-14 21:31:31');
INSERT INTO `ad_plan` VALUES (10,10,'推广计划名称',1,'2019-11-28 00:00:00','2019-11-20 00:00:00','2019-11-19 20:42:27','2019-08-14 20:57:12');
INSERT INTO `ad_unit` VALUES (10,10,'第一个推广单元',1,1,10000000,'2019-11-20 11:43:26','2019-11-20 11:43:26'),(12,10,'第二个推广单元',1,1,15000000,'2019-01-01 00:00:00','2019-01-01 00:00:00');
INSERT INTO `ad_unit_district` VALUES (10,10,'陕西省','西安市'),(11,10,'陕西省','西安市'),(12,10,'陕西省','西安市'),(14,10,'山西省','阳泉市');
INSERT INTO `ad_unit_hobby` VALUES (10,10,'爬山'),(11,10,'读书'),(12,10,'写代码');
INSERT INTO `ad_unit_keyword` VALUES (10,10,'汽车'),(11,10,'火车'),(12,10,'飞机');
INSERT INTO `relationship_creative_unit` VALUES (10,10,10);
エクスポート・テスト・インデックス・ファイル
参照してくださいインデックスポータルの全額、ソースコードやダウンロードgithubのポータル / giteeポータルを、実行してmscx-ad-db
実行したプロジェクトを、およびHTTPを:// localhostを:7002 / AD-DB /エクスポート/計画。
セルフテストユニットテストを開発
資格の開発者は絶対に耐えられない独自のコードは、愚かなXのバグが存在するが、常に個人が間違いを犯すことがあるだろう存在であるので、我々は基本的な問題、それのような非サービスの開発、この時、UTの発展を回避する方法を持っていますそれは非常に重要です。
広告配信システムのテスト
以下に示すように我々は、配信システムのユニットテストを準備する必要があります。
私たちの正式なプロジェクト構造一貫した専門の設定でユニットテストモジュールのディレクトリ構造を使用すると、に書き込むためにユニットテストが必要な場合は、私たちのapplication.yml
それにUTにコンフィギュレーションファイルのコピーここではそれらを繰り返さないでください。
カスタマーサービスユニットテスト
@RunWith(SpringRunner.class) @SpringBootTest( classes = {SponsorApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.NONE ) public class UserServiceTest { @Autowired private IUserService userService; @Test // @Transactional public void testCreateUser() throws AdException { UserRequestVO userRequestVO = new UserRequestVO("Isaac Zhang"); UserResponseVO responseVO = userService.createUser(userRequestVO); assert responseVO.getUserName() == "Isaac Zhang"; System.out.printf("创建用户: %s", JSON.toJSONString(responseVO)); } }
我々は2つの点に特別な注意を払って、我々は、ユーザーのサービスを作成する方法をテストし、上記のコードで見ることができます:
@Transactional
ご注意。
私たちは、同じデータベースと正式なサービスを使用しているので、我々はリアルタイムテストでユーザーを挿入しますad_user
私たちはテーブルにユーザーをしたくない場合は、テーブル、あなたが追加する必要が@Transactional
注釈を、我々が作成されます。コミットされません、それは本当のデータベースに挿入されることはありません。@SpringBootTest
メモは
classes
、そのテストの起動クラスを示しているwebEnvironment = SpringBootTest.WebEnvironment.NONE
当社の現在のテストは、Web環境ではないことを示しています。
ここでは、各サービスのためのユニットテストを書くことがないですが、私たちは、現実世界のエンタープライズ開発環境でコードカバレッジ大規模な開発チームは確かにユニットテストの要件を持っているだろうことを覚えておく必要があり、一般的に低いではありませんで60%
私が個人的に所有し、行代码覆盖率
私たちの真のすべてのメソッドは、実行と検証しようとすることを確実にするために> 80%です。
我々はそれをテストするために、ユニットの残りを達成してみてください。
広告検索システムのテスト
外側だけ当社の検索サービスは、サービスを提供するので、我々は唯一のコードせ、その上でテストクラスを作成する必要があります。
package com.sxzhongf.ad.search;
import com.sxzhongf.ad.AdSearchApplication;
import com.sxzhongf.ad.search.vo.SearchRequest;
import com.sxzhongf.ad.search.vo.SearchResponse;
import com.sxzhongf.ad.search.vo.feature.DistrictFeature;
import com.sxzhongf.ad.search.vo.feature.FeatureRelation;
import com.sxzhongf.ad.search.vo.feature.HobbyFeatrue;
import com.sxzhongf.ad.search.vo.feature.KeywordFeature;
import com.sxzhongf.ad.search.vo.media.AdSlot;
import com.sxzhongf.ad.search.vo.media.App;
import com.sxzhongf.ad.search.vo.media.Device;
import com.sxzhongf.ad.search.vo.media.Geo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* SearchTest for 搜索服务测试用例
*
* @author <a href="mailto:[email protected]">Isaac.Zhang | 若初</a>
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdSearchApplication.class, webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class SearchTest {
@Autowired
private ISearch search;
@Test
public void testFetchAds() {
SearchRequest request = new SearchRequest().builder()
.mediaId("isaac-search-mediaId")
.requestInfo(new SearchRequest.RequestInfo(
"request id",
Arrays.asList(
new AdSlot().builder()
.adSlotCode("slot code")
.height(800)
.minCpm(1024)
.positionType(1)
.type(Arrays.asList(1))
.build()
),
buildSimpleApp(),
buildSimpleGeo(),
buildSimpleDevice()
))
.featureInfo(
buildSimpleFeatureInfo(
Arrays.asList("汽车", "火车", "飞机"),
Collections.singletonList(
new DistrictFeature.ProvinceAndCity(
"陕西省", "西安市"
)
),
Arrays.asList("爬山", "写代码", "飞机"),
FeatureRelation.OR
)
)
.build();
SearchResponse response = search.fetchAds(request);
// assert response.adSlotRelationAds.get(0).contains("key");
System.out.println("开始查询广告拉:" + response);
}
/**
* 创建demo {@link App}
*/
private App buildSimpleApp() {
return new App().builder()
.activityName("simple App activityName")
.appCode("simple App appCode")
.appName("simple app name")
.packageName("simple app package name")
.build();
}
/**
* 创建demo {@link Geo}
*/
private Geo buildSimpleGeo() {
return new Geo().builder()
.longitude(Float.valueOf("100.2222222"))
.latitude(Float.valueOf("38.8888888"))
.city("xiaan")
.province("shaanxi")
.build();
}
/**
* 创建demo {@link Device}
*/
private Device buildSimpleDevice() {
return new Device().builder()
.deviceCode("simple device code")
.deviceMacAddr("simple mac addr")
.displaySize("simple display size")
.ip("127.0.0.1")
.model("simple model")
.screenSize("simple screen size")
.serialName("simple serial name")
.build();
}
private SearchRequest.FeatureInfo buildSimpleFeatureInfo(
List<String> keywords,
List<DistrictFeature.ProvinceAndCity> provinceAndCities,
List<String> hobbys,
FeatureRelation featureRelation
) {
return new SearchRequest.FeatureInfo(
new KeywordFeature(keywords),
new DistrictFeature(provinceAndCities),
new HobbyFeatrue(hobbys),
featureRelation
);
}
}
あなたは非常に体心を理解する必要がある場合は、このテストケースでは、複雑な検索条件の様々な当社の主要なコンポーネントである、私たちはこの事業のパートナーを必要としています。