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

Ballerina - error when running mock tests

已更新

你好,我正在 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 函数,而不是模拟函数。有谁知道为什么会这样?解决方法是什么。

我认为这里的问题是当您 运行 测试依赖于一些封闭的包级函数时,您必须 运行 在包级进行测试。

例如在上面的例子中,如果你的包名是 foo 并且你有所有的 ballerina 源文件,也有上面例子中的测试用例,那么你必须 运行 作为 ballerina test foo 的测试将执行包 foo.

中的测试

使用 ballerina test <bal-file> 会将 bal 文件视为单个实体,它不会知道您的封闭 packages/project。因此,在那种情况下,您可能必须将所有函数都放在同一个 bal 文件中才能使其正常工作。

参考这个 - 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");
}

以上我没有运行。但请尝试。