我对 gtest/gmock 进行了很多研究,但没有一个给我正确的答案。我是 C++ 新手,所以任何帮助都将不胜感激。
我有一个错误:
R cannot be resolved to a variable
Run Code Online (Sandbox Code Playgroud)
排队:
setContentView(R.layout.main);
Run Code Online (Sandbox Code Playgroud)
但我不能解决它做其他用户写的东西应该尝试,这是:
layout main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
我有一个使用类Bar的类Foo.Bar仅在Foo中使用,而Foo正在管理Bar,因此我使用unique_ptr(不是引用,因为我不需要Foo之外的Bar):
using namespace std;
struct IBar {
virtual ~IBar() = default;
virtual void DoSth() = 0;
};
struct Bar : public IBar {
void DoSth() override { cout <<"Bar is doing sth" << endl;};
};
struct Foo {
Foo(unique_ptr<IBar> bar) : bar_(std::move(bar)) {}
void DoIt() {
bar_->DoSth();
}
private:
unique_ptr<IBar> bar_;
};
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,这很好.但是,当我想对代码进行单元测试时,我遇到了问题:
namespace {
struct BarMock : public IBar {
MOCK_METHOD0(DoSth, void());
};
}
struct FooTest : public Test {
FooTest() : barMock{ make_unique<BarMock>() }, out(std::move(barMock)) {}
unique_ptr<BarMock> barMock; …Run Code Online (Sandbox Code Playgroud) 有一个工具可以生成客户端存根的模拟版本,这非常有帮助。测试服务器端目前让我非常头痛。我已经够头痛了,我觉得我一定是做了一些根本性错误的事情。
我可能误读了以下内容,但端到端测试(包括“mock_test”)似乎正在使用实际的客户端-服务器连接来驱动测试。他们可能会模拟客户端,或者模拟客户端读取器/写入器以查看服务器的响应,但我不清楚如何单独测试服务器。
我想要做的事情:我有一些继承自 gRPC 生成的类“Service”的服务实现。假设服务公开了一个接口,::grpc::Status Foo(::grpc::ServerContext* context, const CommandMessage* request, ::grpc::ServerWriter<CommandResponse>* writer);我编写单元测试的直觉是传递一个模拟“ServerWriter”类,并期望在适当的时候调用“Write”。但 ServerWriter 被标记为最终的并且不能被覆盖。
这并不是我第一次在我的标准模拟方法和 gRPC 服务器内容方面遇到麻烦。我已经包装了 Server 类、ServerBuilder 类等,以便我可以将它们的模拟版本放入测试中(以验证在构建服务器时是否将正确的参数传递给我的服务器,例如)
所以我想我错过了 grpc 的一些东西。我只是不知道是什么。我是否应该在单元测试中建立一个真实的服务器并使用模拟客户端对其进行探测?如果我必须使用测试配置来支持测试版本,如何验证是否通过了正确的服务器配置?该代码具有接口类和虚拟方法,但是似乎公开供公众使用的部分似乎并不像我期望的那样容易被模拟。
我的类的构造函数是
A( ...
std::function<bool(const std::string&, const std::string&)> aCallBack,
... );
Run Code Online (Sandbox Code Playgroud)
我想用 EXPECT_CALL 来测试它。这个回调来自另一个 B 类。我创建了一个 Mock 像
class BMock : public B
{
MOCK_METHOD2( aCallBack, bool(const std::string&, const std::string&) );
}
Run Code Online (Sandbox Code Playgroud)
然后我试过了
B *b = new B();
std::function<bool(const std::string&, const std::string&)> func =
std::bind(&B::aCallBack, b, std::PlaceHolders::_1, std::PlaceHolders::_2);
Run Code Online (Sandbox Code Playgroud)
它仍然不起作用。如何获取 gmock 对象的函数指针?
谢谢!!
我什至还没有开始测试,即使我正确地遵循了 GMock 的文档,我也遇到了 GMock 的 MOCK_METHOD 宏的一些语法问题。会不会是编译器的问题?我有:
MingGW (GCC 4.9.2)
谷歌测试 1.10.x
class SimpleClass {
public:
virtual int simpleFirstFunction(int a, int b) { return (a + simpleSecondFunction(b)); }
virtual int simpleSecondFunction(int b) { return (2 * b); }
virtual ~SimpleClass();
};
class MockSimpleClass :public SimpleClass {
MOCK_METHOD(int, simpleSecondFunction, (int a, int b), (override));
};
Run Code Online (Sandbox Code Playgroud)
我看到 3 个编译器错误:
错误 1:关于函数名
MockSimpleClass.cpp:18:24: 错误:
'simpleSecondFunction' 不是一个类型 MOCK_METHOD(int, simpleSecondFunction(int a, int b), (override));
错误 2:关于输入参数
MockSimpleClass.cpp:18:46: 错误:
'(' token MOCK_METHOD(int, simpleSecondFunction, (int a, int …
googlemock ×4
c++ ×3
googletest ×3
unit-testing ×3
android ×1
eclipse ×1
gmock ×1
grpc ×1
tdd ×1
testing ×1