ballerina - 模拟 nil 结果时测试失败
问题描述
尝试运行模拟 nil 返回值的测试时,我收到以下错误。任何的想法?
function f1() returns string?|error {
return f2();
}
function f2() returns string?|error {
return "done";
}
// --tests
import ballerina/test;
@test:Mock {
functionName: "f2"
}
test:MockFunction mockF2 = new;
@test:Config
function shouldReturnNil() {
// arrange
test:when(mockF2).thenReturn(());
// act
string?|error result = f1();
// assert
if result is error {
test:assertFail(string `Expected nil, got error ${result.message()}`);
} else if result is string {
test:assertFail(string `Expected nil, got string ${result}`);
}
}
Error:
Running Tests
hello
[fail] shouldReturnNil:
{ballerina}TypeCastError {"message":"incompatible types: 'error' cannot be cast to '(any|ballerina/test:0.8.0:Error)'"}
at ballerina.test.0_8_0:mockHandler(mock.bal:378)
ppp.hello.0_1_0:f1(main.bal:2)
ppp.hello.0_1_0.tests.main_test:shouldReturnNil(tests/main_test.bal:14)
0 passing
1 failing
0 skipped
解决方案
test:when(mockF2).thenReturn(());
不适用于“()”值。如果需要返回一个 nil 值,则需要使用以下方法。
test:when(mockF2).call("mockNilReturn");
您需要定义如下的“mockNilReturn”函数。
function mockNilReturn() returns string?|error {
return ();
}
推荐阅读
- javascript - 有人可以告诉我我的 Redux 状态有什么问题吗?
- gitlab - 将 Yaml 从 GitLab 转换为 azure devops
- reactjs - firestoreConnect 不会将集合映射到 react-redux-firebase 中的状态
- ruby-on-rails - Ruby 或 Rails 中是否有一组内置的默认日期范围?
- apache-spark - 用于长时间运行进程的 Spark 事件日志
- android - 我的 android 应用在手机上看起来与 android studio 不同
- css - 通过 Web Animations API 应用的“will-change”会产生预期的效果吗?
- spring-boot - 如何在 Spring Boot 项目和 PostgresSQL DB 之间建立连接
- ruby - Ruby on Rails 错误地评估逻辑“或”运算符
- javascript - 如何用ant设计表动态显示数据