CTest:如果“预检”测试失败,如何跳过其他测试?

时间:2018-05-22 13:01:28

标签: cmake ctest

我正在为我的项目添加测试,并且所有测试都有一些先决条件,因此我添加了一个 precheck 测试,所有其他测试都依赖于该测试。如果 precheck 失败,那么我希望其他测试立即停止。

Map<Long, Contact> contacts = new HashMap<>();

String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3};
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "', '" + Email.CONTENT_ITEM_TYPE + "', '" + Event.CONTENT_ITEM_TYPE + "')";
Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null);

while (cur != null && cur.moveToNext()) {
    long id = cur.getLong(0);
    String name = cur.getString(1);
    String mime = cur.getString(2); // email / phone / event
    String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234
    int type = cur.getInt(4);

    Log.d(TAG, "got " + id + ", " + name + ", " + data);

    Contact contact;
    if (contacts.containsKey(id)) {
        contact = contacts.get(id);
    } else {
        contact = new Contact();
        contact.name = name;
        contacts.put(id, infos);
    }

    switch (mime) {
        case Phone.CONTENT_ITEM_TYPE: 
            contact.addPhone(data, type); // you'll need to add this method
            break;
        case Email.CONTENT_ITEM_TYPE: 
            contact.addEmail(data, type); // you'll need to add this method
            break;
        case Event.CONTENT_ITEM_TYPE: 
            contact.addBirthday(data, type); // you'll need to add this method
            break;
    }
}

但似乎add_test( NAME precheck COMMAND false ) add_test( NAME test-1 COMMAND true ) add_test( NAME test-2 COMMAND true ) set_tests_properties( test-1 test-2 PROPERTIES DEPENDS precheck ) 属性只会影响测试的顺序:

DEPENDS

那么如何才能使失败的预先检查停止其他测试?

1 个答案:

答案 0 :(得分:3)

如果您使用的是CMake 3.7或更高版本,则可以使用test fixture相关属性。

对于早期版本的CMake,让您的precheck测试成功创建一个虚拟文件,其他测试依赖于设置REQUIRED_FILES属性。