gtest:检查字符串是否等于两个字符串之一

时间:2018-08-07 16:30:19

标签: c++ googletest

考虑我有两个字符串:

std::string s1 = "ab"; 
std::string s2 = "cd";

并且我想检查(例如使用EXPECT_EQ)某些给定的std::string str是否等于s1s2

如果gtest的ASSERT_*EXPECT_*返回bool我可以写

EXPECT_TRUE(EXPECT_EQ(str, s1) || EXPECT_EQ(str, s2));

但是,不幸的是,他们没有。

2 个答案:

答案 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);