質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Q&A

解決済

2回答

2741閲覧

Saleceforce:ApexでテストコードでJSON文字列をdeserializeできない

Otazoman

総合スコア44

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

Apex

Apexは、Salesforce上で動作するアプリケーション作成をサポートするアプリケーション開発プラットフォーム。プログラミング言語であるApexコードと、独自のApex WebサービスAPIなどで構成されています。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

0グッド

0クリップ

投稿2020/06/22 07:03

前提・実現したいこと

Saleceforceのapexでテストコードを書いているのですが、
JSON.deserializeがうまく動きません。どのようにすれば
うまく動作するのかご教示いただけますでしょうか。

発生している問題・エラーメッセージ

Method does not exist or incorrect signature: void deserialize(List<String>, System.Type) from the type System.JSON

該当のソースコード

apex

1@isTest(SeeAllData=true) 2private class SoqlOperateTest { 3 //オブジェクト定義 4 class TestRes{ 5 String address1; 6 String address3; 7 String areaCode; 8 String mailAddress1; 9 String canMailMagaFlag1; 10 String firstName; 11 String firstNameKana; 12 String gender; 13 String Id; 14 String lastName; 15 String lastNameKana; 16 String tel1; 17 String zipCode; 18 } 19 20 @isTest static void RecordsTransferJsonTest(){ 21 SoqlOperate sq = new SoqlOperate(); 22 String strSql = 'SELECT ' + 23 ' City,' + 24 ' Email,' + 25 ' FirstName,' + 26 ' first_name_kana__c,' + 27 ' gender__c,' + 28 ' Id,' + 29 ' LastName,' + 30 ' last_name_kana__c,' + 31 ' Phone,' + 32 ' PostalCode,' + 33 ' State,' + 34 ' Street' + 35 ' FROM Lead '; 36 List<Lead> leads = Database.query(strSql); 37 List<String> s1 = sq.RecordsTransferJson(leads); 38 testRes t = (TestRes)JSON.deserialize(s11,TestRes.class); 39 String Lead_PersonId = t.Id; 40 System.debug(s1); 41 } 42}

試したこと

以下の通り、コンソールで試した場合はエラーメッセージは表示されず
正常に動作します。TESTで通そうとするとエラーとなります。

apex

1//オブジェクト定義 2public class Test_res{ 3 String address1; 4 String address3; 5 String areaCode; 6 String mailAddress1; 7 String firstName; 8 String firstNameKana; 9 String gender; 10 String Id; 11 String lastName; 12 String lastNameKana; 13 String birthDate; 14 String tel1; 15 String zipCode; 16} 17 18SoqlOperate sq = new SoqlOperate(); 19List<Lead> li = sq.GetLeads(); 20List<String> s = sq.RecordsTransferJson(li); 21for (String str : s) { 22 Test_res t = (Test_res)JSON.deserializeStrict(str,Test_res.class); 23 System.debug('**address1** ' + t.address1); 24 System.debug('**address3** ' + t.address3); 25 System.debug('**areaCode** ' + t.areaCode); 26 System.debug('**mailAddress1** ' + t.mailAddress1); 27 System.debug('**firstName** ' + t.firstName); 28 System.debug('**firstNameKana** ' + t.firstNameKana); 29 System.debug('**gender** ' + t.gender); 30 System.debug('**Id** ' + t.Id); 31 System.debug('**lastName** ' + t.lastName); 32 System.debug('**lastNameKana** ' + t.lastNameKana); 33 System.debug('**birthDate** ' + t.birthDate); 34 System.debug('**tel1** ' + t.tel1); 35 System.debug('**zipCode** ' + t.zipCode); 36}

補足情報(FW/ツールのバージョンなど)

Saleceforce

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーで表示されているようにjson.deserializeの第一引数の型がList<String>になっています。
正しくはstring型です。
https://developer.salesforce.com/docs/atlas.ja-jp.224.0.apexcode.meta/apexcode/apex_class_System_Json.htm#apex_System_Json_deserialize

Method does not exist or incorrect signature: void deserialize(List<String>, System.Type) from the type System.JSON

testRes t = (TestRes)JSON.deserialize(s11,TestRes.class);

s11にはどんな値が入っていますでしょうか?

投稿2020/06/22 16:32

編集2020/06/22 16:34
comefigo

総合スコア1051

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Otazoman

2020/06/23 01:30

DEBUGで出力したものは途中で切れていますが、こんな感じです。 ({ "address1":"東京都千代田区", "address3":"26番地", "areaCode":"26", "mailAddress1":"test_023@example.com", "firstName":"花子", "firstNameKana":"ハナコ",
comefigo

2020/06/23 02:48

無事解決されたようなのでよかったです!
guest

0

解決しました。comefigoさんありがとうございます。
テストなので1つ目要素のみ取得できればいいのでList<String>
一番目の要素取得するようにしました。

apex

1 List<Lead> leads = Database.query(strSql); 2 List<String> s1 = sq.RecordsTransferJson(leads); 3 testRes t = (TestRes)JSON.deserialize(s1[0],TestRes.class); 4 System.debug(t.Id);

投稿2020/06/23 01:37

Otazoman

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問