芭蕾舞女演员-运行模拟测试时出错

时间:2018-10-02 09:58:38

标签: ballerina

已更新

嗨,我正在用芭蕾舞编写一个测试函数,如下所示(在包装通知中)。

import ballerina/test;
import ballerina/io;

@test:Mock {
    packageName: "notifications",
    functionName: "getMissingIds"
}
function mockGetMissingCount() returns (int) {
    int count = 3;

    return count;
}

@test:Config
function testAssertArrayEquals() {
    int answer = 0;
    string[] expectedResult = 3;
    string[] actualResult = getMissingCount();
    io:println("Function mocking test");
    test:assertEquals(actualResult, expectedResult, msg = "function mocking failed");
}   

我在与notificationtest.bal文件相同的程序包中的另一个文件中具有实际功能getMissingCount。但是,当我通过执行

运行测试时
ballerina test notifications

实际的getMissingCount函数被调用,而不是模拟函数被调用。有谁知道为什么会这样吗?解决方法是什么。

2 个答案:

答案 0 :(得分:2)

我认为这里的问题是,当您运行依赖于某些封装程序包级功能的测试时,则必须在程序包级运行测试。

例如,在上述情况下,如果您的软件包名称为foo,并且其中包含所有芭蕾舞女演员源文件,并且上面的示例也包含测试用例,则您必须以{{ 1}},它将执行软件包ballerina test foo中的测试。

使用foo会将bal文件视为一个单独的实体,并且不会知道您所封装的软件包/项目。因此,在这种情况下,您可能必须将所有功能都放在同一个bal文件中才能使其正常工作。

答案 1 :(得分:1)

请参阅-https://ballerina.io/learn/by-example/testerina-function-mocks.html。您的模拟函数缺少注释@test:Mock。另外,您还需要在@test:Mock批注中说明软件包名称。

// Mock 'getMissingIds' function of 'notifications' package.
@test:Mock {
    packageName: "notifications",
    functionName: "getMissingIds"
}
function mockGetMissingCount() returns (int) {
    int count = 3;
    return count;
}

@test:Config
function testAssertArrayEquals() {
    int answer = 0;
    string[] expectedResult = 3;
    string[] actualResult = getMissingCount();
    io:println("Function mocking test");
    test:assertEquals(actualResult, expectedResult, msg = "function mocking failed");
}

我没有执行以上操作。但是请尝试。