>更新
嗨,我正在用芭蕾舞演员编写一个测试函数,如下所示(在包通知中(。
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 文件视为单个实体,并且它不会知道您的封闭包/项目。因此,在这种情况下,您可能必须将所有函数放在同一个 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");
}
我没有运行上述操作。但请尝试。