已更新
嗨,我正在用芭蕾舞编写一个测试函数,如下所示(在包装通知中)。
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函数被调用,而不是模拟函数被调用。有谁知道为什么会这样吗?解决方法是什么。
答案 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");
}
我没有执行以上操作。但是请尝试。