teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードを追記しました。

2017/06/21 05:57

投稿

nabeyaki
nabeyaki

スコア116

answer CHANGED
@@ -1,3 +1,50 @@
1
1
  テストクラスの中で直接、対象のクラスをDatabase.executeBatchに渡して実行がそもそも正解ではありませんか?
2
2
 
3
- [「Apex開発者ガイド」の「Apex の一括処理の使用」というページ](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm)に、「Apex の一括処理のテスト」という記述がありますが、そこだと、Database.executeBatchをテストコードに書く例があります。
3
+ [「Apex開発者ガイド」の「Apex の一括処理の使用」というページ](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm)に、「Apex の一括処理のテスト」という記述がありますが、そこだと、Database.executeBatchをテストコードに書く例があります。
4
+
5
+ ---
6
+ 追記
7
+ コードとしては以下のようなイメージかと思います。
8
+
9
+ ```ここに言語を入力
10
+ //バッチを呼び出すクラス
11
+ public class testexecuteBatch{
12
+ //ボタン契機?スケジュール?か分からないけど、バッチを呼び出すメソッド
13
+ public void kickBatch(){
14
+ nextCreate cls = new nextCreate();
15
+ Database.execute(cls);
16
+ }
17
+ ```
18
+
19
+ ```ここに言語を入力
20
+ //バッチ処理のクラス
21
+ public class nextCreate implements Database.Batchable<sObject> {
22
+ global Database.querylocator start(Database.BatchableContext BC){
23
+ return Database.getQueryLocator('SELECT Id FROM Account');
24
+ }
25
+
26
+ global void execute(Database.BatchableContext BC, List<sObject> scope){
27
+ //バッチの処理などなど
28
+ }
29
+
30
+ global void finish(Database.BatchableContext BC){
31
+ }
32
+ }
33
+ ```
34
+
35
+ このときのtestexecuteBatchのテストの書き方ですが、単純にテストしたいクラス・メソッドをstartTest,stopTestではさんであげればよいかと思います。
36
+
37
+ ```ここに言語を入力
38
+ @isTest
39
+ public class testexecuteBatch{
40
+ @isTest private void unitTest01(){
41
+ Test.startTest();
42
+
43
+ testexecuteBatch cls = new testexecuteBatch();
44
+ cls.kickBatch();
45
+ Test.stopTest();
46
+
47
+ }
48
+ }
49
+
50
+ ```