小编Wou*_*len的帖子

Realm 数据库的工具测试给出了“在创建 Realmconfiguration 之前调用‘Realm.init(Context)’”,即使我称之为

对于我的 Android 应用程序,我使用 Realm 移动数据库。我想为此编写测试,我发现的最好的测试方法是使用仪器测试。

这是我的数据库类的构造函数:

public Database(Context context) {
    this.context = context.getApplicationContext();

    Realm.init(context);

    RealmConfiguration realmConfig = new RealmConfiguration.Builder()
            .name("com.arnowouter.badger.realmdatabase") // TODO: 4/10/2016 check if encryptable
            .build();

    realm = Realm.getInstance(realmConfig);
}
Run Code Online (Sandbox Code Playgroud)

如您所见,调用了 Realm.init(context)。但是当我运行这个测试时:

@RunWith(AndroidJUnit4.class)
@MediumTest
public class DatabaseTest {

    Database database;
    Context context;

    @Before
    public void setupDatabase() {
        context = InstrumentationRegistry.getContext();
        database = new Database(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

java.lang.IllegalStateException: Call `Realm.init(Context)` before creating a RealmConfiguration
        at io.realm.RealmConfiguration$Builder.<init>(RealmConfiguration.java:399)
        at io.realm.RealmConfiguration$Builder.<init>(RealmConfiguration.java:394)
        at com.arnowouter.badger.Database.Database.<init>(Database.java:38)
        at com.arnowouter.badger.DatabaseTest.setupDatabase(DatabaseTest.java:27)
        at java.lang.reflect.Method.invoke(Native Method)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) …
Run Code Online (Sandbox Code Playgroud)

testing android realm android-studio

5
推荐指数
1
解决办法
3984
查看次数

未调用Firebase Cloud Messaging onMessageSent

我正在从GCM切换到FCM.我只用它通过FCM向我的服务器发送消息.我扩展FirebaseMessagingService到实现回调.例如,onSendError()工作正常,但onMessageSent()永远不会执行...我不知道它是否相关,但是当收到消息时,我从我的服务器发送'ack'节.

我的FirebaseMessegingService类:

public class FCMListenerService extends FirebaseMessagingService {

    public FCMListenerService() {
        super();
    }

    @Override
    public void onDeletedMessages() {
        Log.d("wouter", "onDeletedMessages: ");
        super.onDeletedMessages();
    }

    @Override
    public void onMessageSent(String msgID) {
        Log.e("wouter", "##########onMessageSent: " + msgID );
        super.onMessageSent(msgID);
        Database database = new Database(this);
        database.confirmFCMMessageSend(msgID);
        database.closeDatabase();
    }

    @Override
    public void onSendError(String msgID, Exception exception) {
        Log.e("wouter", "onSendError ", exception );
        super.onSendError(msgID, exception);
        Database database = new Database(this);
        database.eraseFCMMsgIDFromFGMMessageLog(msgID);
        database.closeDatabase();
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage); …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-cloud-messaging

4
推荐指数
1
解决办法
1954
查看次数

测试Junit是否捕获到异常

我将以一个代码示例开始;我必须测试一个处理数据包的功能。在此函数中,数据包被打开,并且当它不包含所有预期数据时,将引发InvalidParameterExeption并记录下来。

public void handleData(dataPacket) {
    try {
        analyseData(dataPacket);
    } catch (InvalidParameterException e) {
        e.printStackTrace()
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果一切顺利,则我的异常会打印在终端中。但是我该如何测试呢?我不能使用这个:(因为捕获到异常)

@Test(expected = InvalidParameterExeption.class)
public void testIfFaultyDataPacketIsRecognised {
    handleData(faultyDataPacket);
}
Run Code Online (Sandbox Code Playgroud)

如何测试抛出InvalidParameterExeption?

java testing junit

3
推荐指数
1
解决办法
5558
查看次数