You need to sign in to do that
Don't have an account?

プロパティのテストクラスの書き方について
お世話になっております。
プロパティのテストクラスの書き方がわからなく、ご教授願いたく思っております。
下記のように書きますと、1行しかカバーされません。
どうぞよろしくお願いいたします。
プロパティのテストクラスの書き方がわからなく、ご教授願いたく思っております。
public with sharing class TestController { public List<SelectOption> objects { get { if (objects != null) return objects; objects = new List<SelectOption>(); Map<String, Schema.SObjectType> all = Schema.getGlobalDescribe(); for (String key: all.keySet()) { Schema.DescribeSObjectResult sr = all.get(key).getDescribe(); if (sr.isAccessible() && sr.isUpdateable()) objects.add(new SelectOption(key, sr.getLabel())); } return objects; } set; } }
<apex:page controller="TestController" > <apex:form > <apex:selectList id="objects" multiselect="false" > <apex:selectOptions id="selectObj" value="{!objects}" /> </apex:selectList> </apex:form> </apex:page>上記TestControllerのようなクラスのテストクラスはどのように記述すればよいのでしょうか?
下記のように書きますと、1行しかカバーされません。
@isTest private class TestTestController{ static testMethod void test01 () { TestController c = new TestController(); c.objects = new List<SelectOption>(); } }初歩的な質問かもしれませんが、色々試してみてもわからなく、質問させていただきました。
どうぞよろしくお願いいたします。
今回の処理はコントローラをnewしたタイミングで実行されてると思うのですが、テストを通すには一度参照しなければならないみたいです。
System.assertEquals(cls.objects.isEmpty(), false);というようにリストに結果が入っているか確認する処理を追加したところテストが正常に実行されていました。
All Answers
今回の処理はコントローラをnewしたタイミングで実行されてると思うのですが、テストを通すには一度参照しなければならないみたいです。
System.assertEquals(cls.objects.isEmpty(), false);というようにリストに結果が入っているか確認する処理を追加したところテストが正常に実行されていました。
確認できました!誠にありがとうございました。
今回の処理ですが、次のように実装することも可能です。
コンストラクタはページを表示した際に一度だけ実行されるので初期値をセットするにはコンストラクタ内で実行するのがいいと思います。
この書き方ならSystem.assertEqualsを宣言しなくてもきちんとカバーしていました。
また、テストクラスを作成するときは、『System.assertEquals』をつかって正しい値がセットされているかを確認できます。この判定処理を入れておくと処理が正しく動作している保証になると思います。
プロパティの変数宣言だけして、コンストラクタで変数を初期化する処理を呼び出した方が綺麗ですね。
大変勉強になります。
精進してまいりますので、今後ともどうぞよろしくお願いいたします。