我是我公司的单元测试工作的先驱,需要选择一个模拟框架来使用.我之前从未使用过模拟框架.我们已经选择了Google Test,因此使用Google Mock会很不错.但是,在查看Google Mock的教程后,我的初步印象是:
我对Google的开发人员充满信心,对自己判断模拟框架的能力缺乏信心,以前从未使用过它们.所以我的问题是:这些有效的问题是什么?
或者没有更好的方法来定义模拟对象,并且在实践中直观地使用匹配器吗?我很感激之前使用过Google Mock的人的答案,并且与其他C++框架的比较会很有帮助.
我有一个测试夹具类,目前许多测试都使用它.
#include <gtest/gtest.h>
class MyFixtureTest : public ::testing::Test {
void SetUp() { ... }
};
Run Code Online (Sandbox Code Playgroud)
我想创建一个参数化测试,它也使用MyFixtureTest提供的所有功能,而无需更改我现有的所有测试.
我怎么做?
我在网上发现了类似的讨论,但还没有完全理解他们的答案.
在装配中实现它似乎不太难.
gcc还有一个标志(-fnested-functions)来启用它们.
我想使用PHPUnit来测试以正确的顺序调用方法.
我->at()在模拟对象上使用的第一次尝试不起作用.例如,我预计以下内容会失败,但它不会:
public function test_at_constraint()
{
$x = $this->getMock('FirstSecond', array('first', 'second'));
$x->expects($this->at(0))->method('first');
$x->expects($this->at(1))->method('second');
$x->second();
$x->first();
}
Run Code Online (Sandbox Code Playgroud)
如果以错误的顺序调用事件,我能想到的唯一方法就是强制失败是这样的:
public function test_at_constraint_with_exception()
{
$x = $this->getMock('FirstSecond', array('first', 'second'));
$x->expects($this->at(0))->method('first');
$x->expects($this->at(1))->method('first')
->will($this->throwException(new Exception("called at wrong index")));
$x->expects($this->at(1))->method('second');
$x->expects($this->at(0))->method('second')
->will($this->throwException(new Exception("called at wrong index")));
$x->second();
$x->first();
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?谢谢!
看起来这应该很容易,但我不是专家,谷歌没有帮助.
我想在Matlab中以优雅的方式为n维空间生成标准有序基矢量.例如,行为类似于以下内容:
>> [e1, e2] = SOB(2);
>> e1
e1 = 1 0
>> e2
e2 = 0 1
Run Code Online (Sandbox Code Playgroud)
我希望有一个1-liner并且不想真正想要为这么简单的东西编写函数.
谢谢
我在运行go程序时得到这个堆栈跟踪:
/home/travis/.gimme/versions/go1.6.linux.amd64/src/runtime/panic.go:464 +0x3e6
github.com/DataDog/datadog-go/statsd.(*Client).Event(0x0, 0xc8200c7ec8, 0x0, 0x0)
/home/travis/gopath/src/github.com/DataDog/datadog-go/statsd/statsd.go:286 +0x11f
github.com/some/path/server.(*Server).buildAndUpdate(0xc820024068, 0xc820064600, 0x0, 0x0)
/home/travis/gopath/src/github.com/some/path/server/http.go:86 +0xf9f
created by github.com/some/path/server.(*Server).processPullRequestEvent
/home/travis/gopath/src/github.com/some/path/server/http.go:169 +0x53f
Run Code Online (Sandbox Code Playgroud)
Event函数的签名是:
func (c *Client) Event(e *Event) error
Run Code Online (Sandbox Code Playgroud)
这也可以在这里看到:https://github.com/DataDog/datadog-go/blob/cc2f4770f4d61871e19bfee967bc767fe730b0d9/statsd/statsd.go#L285
类型定义Event可以在这里看到:https://github.com/DataDog/datadog-go/blob/cc2f4770f4d61871e19bfee967bc767fe730b0d9/statsd/statsd.go#L333
类型定义Client可以在这里看到:https://github.com/DataDog/datadog-go/blob/cc2f4770f4d61871e19bfee967bc767fe730b0d9/statsd/statsd.go#L59
我的问题是,我如何解释这一行的内存地址,更一般地说,任何涉及类型变量作为目标和参数的堆栈跟踪?
github.com/DataDog/datadog-go/statsd.(*Client).Event(0x0, 0xc8200c7ec8, 0x0, 0x0)
Run Code Online (Sandbox Code Playgroud)
当我查看http://www.goinggo.net/2015/01/stack-traces-in-go.html(这是我能够在这个主题上找到的唯一信息)时,我没有看到任何关于如何在涉及结构时解释输出.
我在Visual Studio 2003中使用MFC.我有一个带ID的编辑控件IDC_COMMENT_EDIT.在下面的代码中,在我第一次调用之后GetClientRect,我不期望值的rc变化.
CWnd* pWnd = GetDlgItem(IDC_COMMENT_EDIT);
if (pWnd != NULL)
{
RECT rc;
pWnd->GetClientRect(&rc);
pWnd->MoveWindow(&rc, TRUE);
pWnd->GetClientRect(&rc);
}
Run Code Online (Sandbox Code Playgroud)
rc.top并且rc.left是0按预期的方式全部通过的方式.但是:
在第一次打电话之后GetClientRect,我得到了rc.bottom == 52,和rc.right == 575.
第二次打电话后GetClientRect,我得到了rc.bottom == 48,和rc.right == 571.
有谁知道发生了什么事?
我试图在Matlab中使用二进制数的组件作为布尔值.不幸的是,他们没有像我期望的那样行事.以下面的代码为例:
for x = dec2bin(0:1)'
x(1) % the leading bit of x
if logical(x(1))
disp('yes')
else
disp('no')
end
end
Run Code Online (Sandbox Code Playgroud)
它输出:
ans = 0
yes
ans = 1
yes
Run Code Online (Sandbox Code Playgroud)
有人知道为什么会这样,当x(1)为1时我怎么能输出'yes',否则输出'no'?
谢谢!
我不小心为我的一个项目单击了“查看类图”。如何从我的项目中删除 .cd 文件?
更新:您不能在调试时执行此操作,但您可以右键单击它并说“从项目中排除”。谢谢大家!
c++ ×2
matlab ×2
mocking ×2
binary ×1
boolean ×1
c ×1
function ×1
go ×1
googlemock ×1
googletest ×1
mfc ×1
php ×1
phpunit ×1
standards ×1
unit-testing ×1
visual-c++ ×1