小编des*_*ons的帖子

Google Mock是一个很好的模拟框架吗?

我是我公司的单元测试工作的先驱,需要选择一个模拟框架来使用.我之前从未使用过模拟框架.我们已经选择了Google Test,因此使用Google Mock会很不错.但是,在查看Google Mock的教程后,我的初步印象是:

  • 需要使用MOCK_METHODn宏重新声明模拟类中的每个方法似乎是不必要的,并且似乎违反了DRY原则.
  • 他们的匹配器(例如,EXPECT_CALL中的'_'(乌龟,前进(_));)和匹配顺序似乎太强大了.比如,很容易说出你不想要的东西,并错过那种错误.

我对Google的开发人员充满信心,对自己判断模拟框架的能力缺乏信心,以前从未使用过它们.所以我的问题是:这些有效的问题是什么?

或者没有更好的方法来定义模拟对象,并且在实践中直观地使用匹配器吗?我很感激之前使用过Google Mock的人的答案,并且与其他C++框架的比较会很有帮助.

c++ mocking googlemock

62
推荐指数
4
解决办法
3万
查看次数

Google Test:使用现有测试夹具类的参数化测试?

我有一个测试夹具类,目前许多测试都使用它.

#include <gtest/gtest.h>
class MyFixtureTest : public ::testing::Test {
  void SetUp() { ... }
};
Run Code Online (Sandbox Code Playgroud)

我想创建一个参数化测试,它也使用MyFixtureTest提供的所有功能,而无需更改我现有的所有测试.

我怎么做?

我在网上发现了类似的讨论,但还没有完全理解他们的答案.

c++ unit-testing googletest

20
推荐指数
2
解决办法
3万
查看次数

为什么C标准不支持嵌套函数?

在装配中实现它似乎不太难.

gcc还有一个标志(-fnested-functions)来启用它们.

c standards function

13
推荐指数
3
解决办法
8228
查看次数

PHPUnit:如何测试方法调用顺序不正确?

我想使用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)

有没有更优雅的方式来做到这一点?谢谢!

php phpunit mocking

7
推荐指数
1
解决办法
1286
查看次数

Matlab:获取标准基础向量的简便方法?

看起来这应该很容易,但我不是专家,谷歌没有帮助.

我想在Matlab中以优雅的方式为n维空间生成标准有序基矢量.例如,行为类似于以下内容:

>> [e1, e2] = SOB(2);
>> e1

  e1 =    1     0

>> e2

  e2 =    0     1
Run Code Online (Sandbox Code Playgroud)

希望有一个1-liner并且不想真正想要为这么简单的东西编写函数.

谢谢

matlab linear-algebra

6
推荐指数
3
解决办法
2万
查看次数

如何解释Go stacktrace

我在运行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(这是我能够在这个主题上找到的唯一信息)时,我没有看到任何关于如何在涉及结构时解释输出.

go

5
推荐指数
1
解决办法
1724
查看次数

MFC的GetClientRect和MoveWindow不保留大小?

我在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.left0按预期的方式全部通过的方式.但是:
在第一次打电话之后GetClientRect,我得到了rc.bottom == 52,和rc.right == 575.
第二次打电话后GetClientRect,我得到了rc.bottom == 48,和rc.right == 571.

有谁知道发生了什么事?

mfc visual-studio-2003 visual-c++

3
推荐指数
1
解决办法
6036
查看次数

Matlab:用作布尔值时的二进制数不符合预期吗?

我试图在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'?

谢谢!

binary matlab boolean

1
推荐指数
1
解决办法
912
查看次数

Visual Studio:从项目中删除类图?

我不小心为我的一个项目单击了“查看类图”。如何从我的项目中删除 .cd 文件?

更新:您不能在调试时执行此操作,但您可以右键单击它并说“从项目中排除”。谢谢大家!

class-diagram visual-studio-2008

0
推荐指数
1
解决办法
1804
查看次数