我正在使用Gmock进行测试。我有一个类,其中所有的方法都是静态的。 例如静态方法的Gmock
class A
{
static int Method1(int x,int y){return (x+y)};
};
如何使用Gmock测试此类。 请帮我一把。 谢谢
我正在使用Gmock进行测试。我有一个类,其中所有的方法都是静态的。 例如静态方法的Gmock
class A
{
static int Method1(int x,int y){return (x+y)};
};
如何使用Gmock测试此类。 请帮我一把。 谢谢
你不能不修改你的代码。但是你可以将你的应用程序与存根对象连接起来。只需创建另一个“A类”实现并将其与您的测试应用程序链接起来。
您可以通过创建独立模拟类来实现这一点,该模拟类将不会从您需要模拟的类派生。以下是你将如何做到这一点。
步骤 - 1:评论的具有类的静态功能
// Comment the class
/*
class A
{
static int Method1(int x,int y){return (x+y)};
};
*/
步骤 - 2:创建具有相同名称为A
一个模拟类和模拟在它的Method1
。请注意,它不是从原来的类派生
class A {
public:
MOCK_METHOD2(Method1, int(int x, int y));
};
让我们假设这是使用需要被嘲笑它UsingA
静态函数的类。这是如何写出来的。
class UsingA {
A &a1;
public:
UsingA(A & _a1) : a1(_a1) {}
int CallFn() {
// Original function that needs to be commented
// return a1::Method1(10,25);
return a1.Method1(10, 20);
}
};
那么这里就是你怎么会写测试
TEST(MyMockTest, Method1Test) {
A mstat;
UsingA ua(mstat);
EXPECT_CALL(mstat, Method1(_,_))
.Times(1)
.WillOnce(Return(100));
int retVal = ua.CallFn();
EXPECT_EQ(retVal,100);
}
可能不是最好的方式,但服务器旨意。希望它有帮助
我想你问如何嘲笑方法吗?不测试这个类,因为在你的例子中这将是微不足道的 – Martin
就像这样。 B类 { 空隙XYZ {A ::方法1(X,Y)} } 这是case.How我是否GTEST类B. 我知道我必须模拟类A.But而不进行任何源代码中的更改。如何测试B? – Viky
如果不进行修改,则在测试B类时不能模拟Method1。给定您的示例时,要给出具体的建议有点困难,因为对Method1的调用是毫无意义的。如果您只想验证调用是否正确完成,可以在B的构造函数中注入静态方法,并在测试时传递一个模拟函数。 – Martin