学习单元测试Morker出现内存泄露和error,求助!

嘤鸣求友 2016-11-29 08:05:08
源代码很简单,就是两数相加:这里是测试代码(后面给出 被测代码):

#include <mockcpp/mockcpp.hpp>
#include "testngpp/testngpp.hpp"
#include "calculator.h"

USING_TESTNGPP_NS
FIXTURE(Calcu1129)
{
SETUP()
{
INFO("Start Calcu29");
}
TEARDOWN()
{
INFO("TEARDOWN Calcu29");// delete foo;
}
TEST(calculator.h add t1)
{
INFO("Start mocker m_add");
MOCKER(m_add)
.stubs()//expects(once())
.with(eq(4), eq(11))
.will(returnValue(15));
INFO("End mocker m_add");
ASSERT_EQ(15,m_add(4,11));
INFO("assert_eq");
}
TEST(calculator.h add t2)
{
ASSERT_NE(4,m_add(1,2));
WARN("assert_ne");
}
TEST(calculator.h m_divide() t3)
{
ASSERT_DELTA(2.5,m_divide(5,2),0.001);
}
TEST(calculator.h m_divide() t4)
{
ASSERT_THROWS(m_divide(5,0),std::runtime_error);
}

// TEST(calculator.h m_divide() t5)
// {
// m_divide(5,0);
// }

};


错误如下:


[ 57%] Built target calcu
[ 71%] Linking CXX shared library libzvsTestSuit.so
run test.........................
+ testngpp-runner /home/weiran/TestDebug1118/utSimple1129/build/test/libzvsTestSuit -L/usr/local/testngpp/listener -ltestngppstdoutlistener -c -l0 -ltestngppxmllistener /home/weiran/TestDebug1118/utSimple1129/output/test_result.xml -t* > succ > nothing -c10
loading testngppstdoutlistener ... OK
loading testngppxmllistener ... OK
.
[ INFO ] zvsTestSuit::CBar::should be able to div 2 integers - TestBar.h:18: the result should be double type
.
[ WARNING ] zvsTestSuit::CBar::if devident is 0 => throw exception - TestBar.h:24: not implemented yet
.
[ INFO ] zvsTestSuit::CBar::test devide by 0 with mock - TestBar.h:31: CBar
.
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - TestCommon.h:16: Start Calcu29
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - TestCommon.h:26: Start mocker m_add
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - TestCommon.h:31: End mocker m_add
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - TestCommon.h:33: assert_eq
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - TestCommon.h:21: TEARDOWN Calcu29
[ FAILED ] zvsTestSuit::Calcu1129::calculator.h add t1 - NULL:0: Leaked object at 0x00C2FDF0 (24 bytes) [content 40 6F 7E FC C8 7F 00 00 60 FC ] [at (instruction 0x00007FC8FC58ED76, 0)].
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t1 - debug_new.cpp:770: 54 leak(s) found.
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t2 - TestCommon.h:16: Start Calcu29
[ ERROR ] zvsTestSuit::Calcu1129::calculator.h add t2 - TestCommon.h:36:
=====================================
Unexpected invocation: the invocation cannot be found in allowed invoking list.
Invoked: m_add((int)0x1/1, (int)0x2/2)
Allowed:
method(m_add)
.stubs()
.invoked(2)
.with(eq((int)0x4/4), eq((int)0xb/11))
.will(returnValue((int)0xf/15));
method(m_add)
.stubs()
.invoked(0)
.with(eq((int)0x4/4), eq((int)0xb/11))
.will(returnValue((int)0xf/15));
=====================================
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t2 - TestCommon.h:21: TEARDOWN Calcu29
[ ERROR ] zvsTestSuit::Calcu1129::calculator.h add t2 - TestCommon.h:36:
=====================================
Unexpected invocation: the invocation cannot be found in allowed invoking list.
Invoked: m_add((int)0x1/1, (int)0x2/2)
Allowed:
method(m_add)
.stubs()
.invoked(2)
.with(eq((int)0x4/4), eq((int)0xb/11))
.will(returnValue((int)0xf/15));
method(m_add)
.stubs()
.invoked(0)
.with(eq((int)0x4/4), eq((int)0xb/11))
.will(returnValue((int)0xf/15));
=====================================
[ FAILED ] zvsTestSuit::Calcu1129::calculator.h add t2 - NULL:0: Leaked object at 0x00C324B0 (104 bytes) [content C0 0C A0 FC C8 7F 00 00 C8 24 ] [at (instruction 0x00007FC8FC7FAFF9, 0)].
[ INFO ] zvsTestSuit::Calcu1129::calculator.h add t2 - debug_new.cpp:770: 7 leak(s) found.
[ INFO ] zvsTestSuit::Calcu1129::calculator.h m_divide() t3 - TestCommon.h:16: Start Calcu29
[ INFO ] zvsTestSuit::Calcu1129::calculator.h m_divide() t3 - TestCommon.h:21: TEARDOWN Calcu29
.
[ INFO ] zvsTestSuit::Calcu1129::calculator.h m_divide() t4 - TestCommon.h:16: Start Calcu29
[ INFO ] zvsTestSuit::Calcu1129::calculator.h m_divide() t4 - TestCommon.h:21: TEARDOWN Calcu29
.



被测函数很简单,就是整数运算:


#include <exception>
#include <stdexcept>
#include "calculator.h"
int m_add(int a, int b) {
return a+b;
}
int m_subtract(int a, int b) {
return a-b;
}
int m_multiply(int a, int b) {
return a * b;
}
float m_divide(int a, int b) {
if(b==0) throw std::runtime_error("divide 0 error!");
return a/float(b);
}


目前一筹莫展呀,期待大家帮帮忙~
...全文
396 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-30
  • 打赏
  • 举报
回复
make过程包括测试程序的执行过程。
嘤鸣求友 2016-11-30
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
额,我这个是 使用testngpp + morckcpp 单元测试 make命令时出了问题,函数代码本身没有错误呀……
赵4老师 2016-11-30
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
嘤鸣求友 2016-11-30
  • 打赏
  • 举报
回复
这个应该不难吧,谷歌的框架很多人用吧,自己顶顶,有回必复

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧