OR 参数匹配器
OR argument matcher
#include <vector>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using namespace ::testing;
class A {
public:
virtual void f(std::vector<int>& b, std::vector<int>& b1) { }
};
class AA : public A {
public:
MOCK_METHOD2(f, void(std::vector<int>&, std::vector<int>&));
};
int main()
{
std::vector<int> v = { 3,2,1 };
std::vector<int> v1 = { 1,2,3 };
AA a;
EXPECT_CALL(a, f(ContainerEq(v), ContainerEq(v1))).Times(1);
// code will call f finally
return 0;
}
我模拟的函数 f
将传入 2 个向量。然而,序列可能是随机的,v,v1 或 v1,v 都是正确的。如何在 EXPECT_CALL 中添加 OR 运算符,例如:
EXPECT_CALL(a, f(ContainerEq(v) or ContainerEq(v1), ContainerEq(v1) or ContainerEq(v))).Times(1);
可能吗?
是的,这可以使用 AnyOf
:
EXPECT_CALL(a, f(AnyOf(ContainerEq(v),ContainerEq(v1)),
AnyOf(ContainerEq(v),ContainerEq(v1)));
使用 C++11 或更高版本,您还可以执行以下操作:
auto matcher = AnyOf(ContainerEq(v),ContainerEq(v1));
EXPECT_CALL(a, f(matcher, matcher));
#include <vector>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using namespace ::testing;
class A {
public:
virtual void f(std::vector<int>& b, std::vector<int>& b1) { }
};
class AA : public A {
public:
MOCK_METHOD2(f, void(std::vector<int>&, std::vector<int>&));
};
int main()
{
std::vector<int> v = { 3,2,1 };
std::vector<int> v1 = { 1,2,3 };
AA a;
EXPECT_CALL(a, f(ContainerEq(v), ContainerEq(v1))).Times(1);
// code will call f finally
return 0;
}
我模拟的函数 f
将传入 2 个向量。然而,序列可能是随机的,v,v1 或 v1,v 都是正确的。如何在 EXPECT_CALL 中添加 OR 运算符,例如:
EXPECT_CALL(a, f(ContainerEq(v) or ContainerEq(v1), ContainerEq(v1) or ContainerEq(v))).Times(1);
可能吗?
是的,这可以使用 AnyOf
:
EXPECT_CALL(a, f(AnyOf(ContainerEq(v),ContainerEq(v1)),
AnyOf(ContainerEq(v),ContainerEq(v1)));
使用 C++11 或更高版本,您还可以执行以下操作:
auto matcher = AnyOf(ContainerEq(v),ContainerEq(v1));
EXPECT_CALL(a, f(matcher, matcher));