考虑我有两个字符串:
std::string s1 = "ab";
std::string s2 = "cd";
并且我想检查(例如使用EXPECT_EQ)某些给定的std::string str
是否等于s1
或s2
。
如果gtest的ASSERT_*
和EXPECT_*
返回bool
我可以写
EXPECT_TRUE(EXPECT_EQ(str, s1) || EXPECT_EQ(str, s2));
但是,不幸的是,他们没有。
答案 0 :(得分:5)
在这种情况下,export interface Json{
Name: string;
City: string;
Country: string;
}
存在一个问题。在gtest's doc中被描述为:
有时用户必须使用EXPECT_TRUE()检查复杂 表达,因为缺少更好的宏。这有没有问题 向您显示表达式各部分的值,使其很难 了解出了什么问题。
因此建议使用import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class JsonService {
url = 'https://www.w3schools.com/angular/customers.php';
constructor(private http: HttpClient) { }
getjson(){
return this
.http
.get(`${this.url}`);
}
}
:
EXPECT_TRUE
如果单元测试失败,它会提供更好的诊断:
EXPECT_PRED
您可以将上面的消息与TEST(CompareStr, Test1) {
std::string s1 = "ab";
std::string s2 = "cd";
std::string str;
EXPECT_PRED3([](auto str, auto s1, auto s2) {
return str == s1 || str == s2;}, str, s1, s2);
}
的输出进行比较:
[ RUN ] CompareStr.Test1
Test.cpp:5: Failure
[](auto str, auto s1, auto s2) { return str == s1 || str == s2;}(str, s1, s2) evaluates to false, where
str evaluates to
s1 evaluates to ab
s2 evaluates to cd
答案 1 :(得分:3)
尝试一下:
std::string s1 = "ab";
std::string s2 = "cd";
std::string str = "ab";
EXPECT_TRUE(s1 == str || s2 == str);