Seasar DI Container with AOP

テスト技法Exercise

テスト技法の理解度をチェックします。下記の問題に関して当てはまるものを1つ選んでチェックを入れたら、下の「解答へGO」ボタンをクリックしてください。

モックを作成するための設定に関する問題

【問題1】
インターフェースのモックを設定するには、以下のどのInterceptorを使えばいいでしょうか?
ヒント:モックを作成するための設定を参照してください。

1) TraceInterceptor
2) MockInterceptor
3) ThrowsInterceptor
4) DelegateInterceptor

【問題2】
インターフェースのメソッドに戻り値を設定するMockInterceptorのメソッドは以下のどれでしょうか?
ヒント:モックを作成するための設定を参照してください。

1) setMock(String methodName, Object returnValue)
2) isInvoked(String methodName)
3) getArgs(String methodName)
4) setReturnValue(String methodName, Object returnValue)

【問題3】
MockInterceptor#isInvoked()は何を判定するメソッドでしょうか?
ヒント:モックを作成するための設定を参照してください。

1) メソッドに引数が入っているかどうかを判定する。
2) メソッドがあるかどうかを判定する。
3) メソッドが呼ばれたかどうかを判定する。
4) メソッドにモックが作成できるかどうかを判定する。


モックの使用方法に関する問題

【問題1】
文中の[1]に入る言葉はどれでしょうか?
インターフェースのモックを作成するには、インターフェースに対して設定したMockInterceptorを[1]して使用します。
ヒント:モックの使用方法を参照してください。

1) アスペクト
2) Dependency Injection
3) BEANアノテーション
4) 継承

【問題2】
public interface Hello {
  public String showMessage(String str);
}
上記のインターフェースでshowMessage()メソッドが呼び出されたときは"Hello"を返すようにコンポーネント定義でモックを作成する場合、
以下の定義で[1]に入るタグはどれでしょうか?

<component class="examples.aop.Hello">
  <aspect>
    <component class="org.seasar.framework.aop.interceptors.MockInterceptor">
      <initMethod name="setReturnValue">
          [1]
      <initMethod>
    </component>
  </aspect>
</component>

ヒント:モックの使用方法を参照してください。

1)
<arg>"showMessage(String str)"</arg>
<arg>"Hello"</arg>
2)
<arg>"showMessage"</arg>
<arg>"Hello"</arg>
3)
<arg>"showMessage"</arg>
4)
<arg>"Hello"</arg>
<arg>"showMessage"</arg>

【問題3】
public interface Hello {
  public String showMessage(String str);
}
上記メソッドに対してdiconファイルを使用せずにJavaでモックを定義した場合、メソッドを呼び出したときに
引数の値を正しく表示するコードはどれでしょうか?

MockInterceptor mi = new MockInterceptor();
mi.setReturnValue("showMessage", "world");
Hello hello = mi.createProxy(Hello.class);
hello.showMessage("hoge");
ヒント:モックの使用方法を参照してください。

1) System.out.println(mi.getArgs("showMessage"));
2) System.out.println(mi.getArgs("Hello")[0]);
3) System.out.println(mi.getReturnValue("showMessage")[0]);
4) System.out.println(mi.getArgs("showMessage")[0]);


S2Unitの作成方法に関する問題

【問題1】
S2Unitを使用する場合、どのクラスを継承してテストクラスを作成するでしょうか?
ヒント:S2Unitを使ったテストクラスの作成方法を参照してください。

1) junit.framework.TestCase
2) org.seasar.extension.unit.S2UnitTestCase
3) org.seasar.framework.unit.S2TestCase
4) org.seasar.extension.unit.S2TestCase


S2Containerの自動生成に関する問題

【問題1】
S2Unitを使用するテストクラスで自動的にS2Containerが生成されるのはどこでしょうか?
ヒント:S2Unit機能のS2Containerの自動生成を参照してください。

1) テストメソッド(testXxx)ごと
2) setUp()メソッド
3) コンストラクタ
4) main


S2Containerに対するregister(),getComponent(),include()に関する問題

【問題1】
S2Unitには、S2Containerに対するメソッドが用意されていますが、用意されていないメソッドはどれでしょうか?
ヒント:S2Unit機能のregister(),getComponent(),include()メソッドを参照してください。

1) register()
2) getComponent()
3) destroy()
4) include()


include時のPATHの省略に関する問題

【問題1】
S2Unitでdiconファイルを読み込みたい場合に使うメソッドはどれでしょうか?
ヒント:S2Unit機能のregister(),getComponent(),include()メソッドを参照してください。

1) readDicon()
2) register()
3) include()
4) create()

【問題2】
S2Unitを使用しているaaa.bbb.CccTestテストクラスでaaa/bbb/hoge.diconをインクルードする場合、正しいのはどれでしょうか?
ヒント:S2Unit機能のinclude時のPATHの省略 を参照してください。

1) include("../hoge.dicon")
2) include("aaa/bbb/hoge")
3) include("aaa.bbb.hoge.dicon")
4) include("hoge.dicon")


変数の自動セットに関する問題

【問題1】

<component name="TestA" class="java.lang.String">
  <arg>"Hello"<arg>
</component>
文字列"Hello"が自動的にセットされない変数宣言はどれでしょうか?
ヒント:S2Unit機能変数の自動セットを参照してください。

1) public String hoge
2) private String hello;
3) private String testA="testA";
4) private String testA_;


【問題2】

<component name="testB" class="java.lang.String">
  <arg>"Hello"</arg>
</component>
<component name="testA" class="java.lang.String">
  <arg>"world"</arg>
</component>
文字列"world"が自動的にセットされる変数宣言はどれでしょうか?コンポーネントの登録順はtestB,testAとする。
ヒント:S2Unit機能変数の自動セットを参照してください。

1) private String TESTA_;
2) private String testA_;
3) private String testA_ = "testA";
4) private static final String testA_ = "testA";


setUpXxx(),tearDownXxx()メソッドに関する問題

【問題1】
あるテストメソッドにだけ個別の初期化処理を行いたい場合の正しいメソッド定義は以下のどれでしょう?
ヒント:S2Unit機能のsetUpXxx(),tearDownXxx()メソッドを参照してください。

1) xxxSetUp()
2) afterSetUp()
3) setUpXxx()
4) setupXxx()

【問題2】
S2Unitを使用するテストクラスで以下のようなString型の変数strにtestHello()メソッドだけに"Hello"文字を設定したい場合、
その設定を行うメソッドの定義で正しいのはどれでしょうか?
private String str;

public void testHello() throws Exception {
    :
}
ヒント:S2Unit機能のsetUpXxx(),tearDownXxx()メソッドを参照してください。

1) public void setUpHello() throws Exception;
2) private void setUpHello() throws Exception;
3) public void setUpTestHello() throws Exception;
4) public void setUphello() throws Exception;

【問題3】
あるテストメソッドにだけ個別の終了処理を行いたい場合の正しいメソッド定義は以下のどれでしょう?
ヒント:S2Unit機能のsetUpXxx(),tearDownXxx()メソッドを参照してください。

1) xxxTearDown()
2) afterTearDown()
3) tearDownXxx()
4) teardownXxx()

【問題4】
testHelloメソッドに対応するtearDownHelloメソッドはどのタイミングで実行されるでしょう?
ヒント:S2Unit機能のsetUpXxx(),tearDownXxx()メソッドを参照してください。

1) tearDown()メソッドの直後
2) tearDown()メソッドの直前
3) destroy()メソッドの直前
4) testHello()メソッドの直前

トランザクション制御に関する問題

【問題1】
テストメソッドの直前にトランザクションを開始し、テストで行った処理をロールバックするためにはテストメソッド名をどのようにすればよいでしょうか?
ヒント:S2Unit機能のトランザクション制御を参照してください。

1) testXxxTx()
2) testXxxTX()
3) testTxXxx()
4) txTestXxx()

readXls()メソッドに関する問題

【問題1】
DataSetに検証用のExcelデータを読み込むメソッドはどれでしょうか?
ヒント:S2Unit機能のreadXls()メソッドを参照してください。

1) readXls()
2) readDbByTable()
3) readDbBySql()
4) readXlsByDataSet()

【問題2】
検証用のExcelデータがaaa/bbb/getEmployee.xlsにある場合、readXls()の正しくない定義方法はどれでしょうか?
テストクラスは、aaa.bbb.EmployeeTestとする。
ヒント:S2Unit機能のreadXls()メソッドを参照してください。

1) readXls("getEmployee.xls")
2) readXls("aaa/bbb/getEmployee.xls")
3) readXls("../bbb/getEmployee.xls")
4) readXls("getEmployee")

assertEquals()メソッドに関する問題

【問題1】
assertEquals()メソッドで予想されるDataSetの結果に対して比較できないものはどれでしょうか?
ヒント:S2Unit機能のassertEquals()メソッドを参照してください。

1) BeanのList
2) MapのList
3) Bean
4) Beanの配列

【問題2】
public interface EmployeeDao {
  public Class BEAN = Employee.class;
  public List getAllEmployees();
}
上記のDAOのgetAllEmployees()メソッドの結果に対してテストを行う場合、 S2Unitを使用するテストクラスで予想されるDataSetを使ってassertEquals()メソッド で比較する方法が正しいのはどれでしょうか?
ただし予想されるDataSetの変数名をexpected、getAllEmployees()メソッドで取得したList の変数名をemployeesとする。
ヒント:S2Unit機能のassertEquals()メソッドを参照してください。

1) assertEquals(expected, employees, "TEST")
2) assertEquals(employees)
3) assertEquals(expected, employees)
4) assertEquals(employees, expected)

reload()メソッドに関する問題

【問題1】
DataSetの中身をプライマリーキーでリロードして新しいDataSetを取得するreload()の正しい定義はどれでしょうか?
ヒント:S2Unit機能のreload()メソッドを参照してください。

1) public void reload(DataSet dataSet)
2) public DataTable reload(DataTable table)
3) public DataSet reload()
4) public DataSet reload(DataSet dataSet)

【問題2】
プライマリーキーでリロードして新しいDataSetを取得するreload()でプライマリーキーの指定について、 正しい説明はどれでしょうか?
ヒント:S2Unit機能のreload()メソッドを参照してください。

1) Excelデータにプライマリーキーを指定する必要がある。
2) DataSetにプライマリーキーを指定する必要がある。
3) reload()の引数でプライマリーキーを指定する必要がある。
4) 何も指定する必要がない。

readXlsWriteDb(),readXlsAllReplaceDb()メソッドに関する問題

【問題1】
あらかじめ準備したテスト用のExcelデータをDBに登録するメソッドはどれでしょうか?
ヒント:S2Unit機能のreadXlsWriteDb(),readXlsAllReplaceDb()メソッドを参照してください。

1) writeXls()
2) readXlsWriteDb()
3) writeDb()
4) dbWrite()

【問題2】
あらかじめ準備したテスト用のExcelデータがaaa/bbb/getEmployee.xlsにある場合、readXlsWriteDb()の正しい定義方法はどれでしょうか?
テストクラスは、aaa.EmployeeTestとする。
ヒント:S2Unit機能のreadXlsWriteDb(),readXlsAllReplaceDb()メソッドを参照してください。

1) readXlsWriteDb("getEmployee.xls")
2) readXlsWriteDb("aaa/bbb/getEmployee")
3) readXlsWriteDb("../getEmployee.xls")
4) readXlsWriteDb("aaa/bbb/getEmployee.xls")

【問題3】
テーブルAのテスト用のデータをExcelファイルに作成してreadXlsAllReplaceDb()メソッドで、そのExcelファイルの内容をテーブルAに格納する場合、Excelファイルの作成方法で正しいのはどれでしょうか?
ただしテーブルAは外部キーでテーブルBを参照しているとする。
ヒント:S2Unit機能のreadXlsWriteDb(),readXlsAllReplaceDb()メソッドを参照してください。

1) テーブルAのシートを1つ作成する。
2) テーブルA,テーブルBの定義順にシートを2つ作成する。
3) テーブルBのシートを1つ作成する。
4) テーブルB、テーブルAの定義順にシートを2つ作成する。

Excelファイルの作成に関する問題

【問題1】
以下の文章の[1]と[2]に入る言葉はどれでしょうか?
検証用のExcelファイルを作成する場合、シート名には[1]、シートの1行目には[2]を記述します。また、N:1のマッピングしている場合は「[2]_関連番号」の名前で記述します。シートの2行目以降にはデータを記述します。
ヒント:テスト技法のExcelファイルの作成を参照してください。

1) [1]Beanクラス名 [2]カラム名
2) [1]テーブル名 [2]カラム名
3) [1]テーブル名 [2]Dao名
4) [1]データベース名 [2]テーブル名

【問題2】
org.seasar.extension.dataset.impl.SqlReaderクラスを使ってデータベースのテーブルの内容をDataSetに読み込ませる場合、SQL文を使用して、その結果をDataSetに読み込ませるメソッドはどれでしょうか?
ヒント:テスト技法のExcelファイルの作成を参照してください。

1) addSql()
2) readSql()
3) addTable()
4) read()

【問題3】
aaa/bbb/Cccクラスでデータベースのテーブルから読み込んだDataSetをExcelファイルに出力する場合、org.seasar.extension.dataset.impl.XlsWriterクラスで出力先を指定して出力しますが、以下のXlsWriterクラスのコンポーネント定義で[1]に入る出力先のパスの指定方法で正しいのはどれでしょうか?出力先のExcelファイルはaaa/bbb/test.xlsとする。

<component class="org.seasar.extension.dataset.impl.XlsWriter" instance="prototype">
                 [1]
</component>
ヒント:テスト技法のExcelファイルの作成を参照してください。

1) <initMethod>#self("aaa/bbb/test.xls")</initMethod>
2) <property name="path">"aaa/bbb/test.xls"</property>
3) <initMethod name="write">"aaa/bbb/test.xls"</initMethod>
4) <arg>"test.xls"</arg>

S2DaoTestCaseに関する問題

【問題1】
S2DaoTestCaseの説明として間違っているのはどれでしょうか?
ヒント:テスト技法のS2DaoTestCaseを参照してください。

1) S2DaoTestCaseはS2TestCaseを継承している。
2) S2DaoTestCaseを継承してテストクラスを作成する。
3) S2DaoTestCaseでは、S2DaoのSELECT文の結果(Bean or BeanList)以外テストできない。
4) SELECT文の結果をテストする場合、予想結果のExcelファイルと比較することができる。

【問題2】
S2DaoTestCaseでS2DaoのSELECT文の結果(Bean)をExcelファイルと比較するとき、結果のBeanに以下のようなCOLUMNアノテーションがある場合、 Excelファイルのシート1行目にそのカラム名を記述する書き方で正しいのはどれでしょうか?

public static final String employeeNumber_COLUMN = "EMPNO";
ヒント:テスト技法のS2DaoTestCaseを参照してください。

1) employeeNumber
2) EMPNO
3) employeeNumber_COLUMN
4) カラムアノテーションされているカラムは比較が出来ないので記述しない。