0

しばらく前にRobolectricの使用を開始しましたが、現在、独自のシャドウオブジェクトの作成でいくつかの問題が発生しています。基本的にデータベーステーブルのonCreateメソッドのみを呼び出すカスタマイズされたSQLiteOpenHelperクラスの動作をテストするコードをいくつか作成しました。

@RunWith(SharedDatabaseHelperTestRunner.class)
public class SharedDatabaseHelperTest {

    private SharedDatabaseHelper helper;

    @Before
    public void setUp() 
            throws Exception {
        helper = new SharedDatabaseHelper(Robolectric.application);


    @Test
    public void shouldCallOnCreateOfDatabaseTables() 
            throws Exception {
        helper.onCreate(null);

        assertTrue(ShadowTweetTable.onCreateCalled);
    }

    @Test 
    public void shouldCallOnUpdateOfDatabaseTables() 
            throws Exception {
        helper.onUpgrade(null, 0, 0);

        assertTrue(ShadowTweetTable.onUpgradeCalled);
    }

データベーステーブルのシャドウオブジェクトは、いくつかのブール変数のみを設定し、onCreateが呼び出されるようにします。

@Implements(TweetTable.class)

public class ShadowTweetTable {

    public static boolean onCreateCalled = false;
    public static boolean onUpgradeCalled = false;

    @Implementation
    public static void onCreate(SQLiteDatabase database) {
        onCreateCalled = true;
    }

    @Implementation
    public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        onUpgradeCalled = true;
    }

テストを実行しているとき、RobolectricTestRunnerは、カスタマイズされたテストランナーがシャドウクラスをバインドしていても、TweetTableにはシャドウフィールドがないことを通知します。

パブリッククラスSharedDatabaseHelperTestRunnerはRobolectricTestRunnerを拡張します{

public SharedDatabaseHelperTestRunner(Class<?> testClass)
        throws InitializationError {
    super(testClass);
}

@Override
protected void bindShadowClasses() {
    Robolectric.bindShadowClass(ShadowTweetTable.class);
}

}

4

0 に答える 0