私はセールスフォースでコードを書きましたが、単体テストをリリースするには、少なくとも75%をカバーする必要があります。
私が直面しているのは、既にファイルで行われているにもかかわらず、classOne
からメソッドを呼び出す がclassOne 内の の単体テストclassTwo
をカバーする必要があることです。classTwo
classTwo
ファイル MyClassTwo
public with sharing class ClassTwo {
public String method1() {
return 'one';
}
public String method2() {
return 'two';
}
public static testMethod void testMethod1() {
ClassTwo two = new ClassTwo();
String out = two.method1();
system.assertEquals(out, 'one'); //valid
}
public static testMethod void testMethod2() {
ClassTwo two = new ClassTwo();
String out = two.method2();
system.assertEquals(out, 'two'); // valid
}
}
ファイル MyClassOne
public with sharing class ClassOne {
public String callClassTwo() {
ClassTwo foo = new ClassTwo();
String something = foo.method1();
return something;
}
public static testMethod void testCallClassTwo() {
ClassOne one = new ClassOne();
String out = one.callClassTwo();
system.assertEquals(out, 'one');
}
}
MyClassOne ファイル内の MyClassTwo method2() 部分をカバーしていないため、MyClassOne のテスト結果は 100% のテスト カバレッジを返しません。
しかし、ご覧のとおり、 MyClassTwo ファイル内に MyClassTwo の単体テストを既に記述しています。
これは、MyClassTwo ファイルの単体テストをコピーして MyClassOne に貼り付ける必要があるということですか?
そうすることで 100% のカバレッジが得られますが、これは本当に面倒でばかげているように思えます。ClassA と ClassB で同じテストを行う....? 私は間違っていますか、それともこの方法ですか?
とはいえ、セールスフォースでモックオブジェクトを作成することは可能ですか? 私はまだ方法を理解していません..
UDPATE
コードを書き直して上記を更新しました。今回は、classTwo method2() を呼び出していなくても、classOne テストが 100% を返さないことを確認しました。