You need to sign in to do that
Don't have an account?
ms-hase-q23ee
REST API POSTメソッドのカバレッジが上がらない
お世話になっております。
@RestResourceでアノテートされたRESTAPIの開発を行っているのですが、テストコードがうまくいかず困っています。
次のコードは何が悪いのか分かる方はいらっしゃいますか?
本体:
@RestResource('/Test/')
global with sharing class Test {
@HttpGet
global static String doGet() {
List<Map<String ,String>> result ;
String a = request.get('a');
String b = request.get('b');
String c = request.get('c');
// 色々処理
JSON.serialize(result);
}
@HttpPost
global static String doPost(String a, String b, String c) {
List<Map<String ,String>> result;
if ('param-a'.equals(a)) {
} else {
}
if ('param-b'.equals(b)) {
} else {
}
// 他、色々処理
return JSON.serialize(result)
}
}
これに対するテストコード:
-----------------------------------------
@IsTest
private class TestTest {
// testing Get method
static testMethod void testdoGet1() {
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.headers.put('Accept','application/json');
req.headers.put('Content-Type','application/x-www-form-urlencoded');
req.requestURI = 'https://ap.salesforce.com/services/apexrest/Test/';
req.params.put('a','param-test1');
req.params.put('b','param-test2');
req.httpMethod = 'GET';
Test.doGet();
}
// testing Post method
static testMethod void testdoGet1() {
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
String result ;
req.headers.put('Accept','application/json');
req.requestURI = 'https://ap.salesforce.com/services/apexrest/Test/';
req.httpMethod = 'POST';
RestContext.request = req;
RestContext.response = res;
result = Test.doPost('param-a', 'param-b','param-c' );
result = Test.doPost('param-ab', 'param-bc','param-c' );
result = Test.doPost('param-a', 'param-b','' );
}
}
GETメソッドに関しては// 色々処理 ・・・に入り、期待通りにコードをテストしてくれています。
POSTメソッドは全くテストできません。
正常系:
Test.doPost('param-a', 'param-b','param-c' );
Test.doPost('param-ab', 'param-bc','param-c' );
異常系:
Test.doPost('param-b', 'param-b','' );
など、何を書いてもカバレッジが上がりません。
if ('param-a'.equals(a)) { (の分岐に入っていないように見えます)
そもそも、doPost()の中に入っいないかも・・・・。
何が悪いのかさっぱり分かりません。
@RestResourceでアノテートされたRESTAPIの開発を行っているのですが、テストコードがうまくいかず困っています。
次のコードは何が悪いのか分かる方はいらっしゃいますか?
本体:
@RestResource('/Test/')
global with sharing class Test {
@HttpGet
global static String doGet() {
List<Map<String ,String>> result ;
String a = request.get('a');
String b = request.get('b');
String c = request.get('c');
// 色々処理
JSON.serialize(result);
}
@HttpPost
global static String doPost(String a, String b, String c) {
List<Map<String ,String>> result;
if ('param-a'.equals(a)) {
} else {
}
if ('param-b'.equals(b)) {
} else {
}
// 他、色々処理
return JSON.serialize(result)
}
}
これに対するテストコード:
-----------------------------------------
@IsTest
private class TestTest {
// testing Get method
static testMethod void testdoGet1() {
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
req.headers.put('Accept','application/json');
req.headers.put('Content-Type','application/x-www-form-urlencoded');
req.requestURI = 'https://ap.salesforce.com/services/apexrest/Test/';
req.params.put('a','param-test1');
req.params.put('b','param-test2');
req.httpMethod = 'GET';
Test.doGet();
}
// testing Post method
static testMethod void testdoGet1() {
RestRequest req = new RestRequest();
RestResponse res = new RestResponse();
String result ;
req.headers.put('Accept','application/json');
req.requestURI = 'https://ap.salesforce.com/services/apexrest/Test/';
req.httpMethod = 'POST';
RestContext.request = req;
RestContext.response = res;
result = Test.doPost('param-a', 'param-b','param-c' );
result = Test.doPost('param-ab', 'param-bc','param-c' );
result = Test.doPost('param-a', 'param-b','' );
}
}
GETメソッドに関しては// 色々処理 ・・・に入り、期待通りにコードをテストしてくれています。
POSTメソッドは全くテストできません。
正常系:
Test.doPost('param-a', 'param-b','param-c' );
Test.doPost('param-ab', 'param-bc','param-c' );
異常系:
Test.doPost('param-b', 'param-b','' );
など、何を書いてもカバレッジが上がりません。
if ('param-a'.equals(a)) { (の分岐に入っていないように見えます)
そもそも、doPost()の中に入っいないかも・・・・。
何が悪いのかさっぱり分かりません。
https://github.com/tyoshikawa1106/apex-rest-resource-sample/blob/master/src/classes/RestAccountManagerTest.cls
All Answers
以前、クラス名に「Test」を指定したところ、テストクラスが通らなくなったという話を聞いたことが有ります。
実際のクラス名に使用していなければ問題ありませんが、もし使用しているのでしたら別のクラス名に変更してみてください。
https://github.com/tyoshikawa1106/apex-rest-resource-sample/blob/master/src/classes/RestAccountManagerTest.cls
画像やリンクの挿入も可能です。よろしければご利用下さい。