由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - question about mock
相关主题
怎么把const T& 作为一个class的member菜鸟读C++ STL源程序的疑问
多少公司用 java guice 这烂玩意?这段C++程序有错吗?
C++的一个问题Andriod上有比较好的Mock Up的工具啊
C++ template preprocessor菜鸟以为C++的unit test功能没有java强大,是一大缺点
内存泄露了吗?请教如何unit test for node.js REST+database
Why this is a dangling pointerhow to debug
定义linked list最后一行什么意思?TeacherWei 和goodbug 问题好解决
请教unique_ptr vs auto_ptrScala,F#或haskell怎么用DI?
相关话题的讨论汇总
话题: foo话题: abc话题: class话题: 测试话题: node
进入Programming版参与讨论
1 (共1页)
w*******a
发帖数: 21
1
很恶心, 公司要求写unit testing code.
class X
{
...
public:
void foo()
{
...
abc_.doSomething();
}
private :
ABC abc_; // created in constructor of X
Node * p;
}
1)如果我要测试class X 的 foo(), 但是 abc_ 并没有作为 passed in a parameter
in function foo(), how could i pass a mocked class ABC instance to
replace abc_?
2) 另外就是假若我测试 foo()的时候, foo() 的执行取决于 X class 前面执行已经建立的状态 state. 我测试的时候如何模拟这个状态的成立? 比如 X class has a linked list Node *p, when foo() is executed, the linked list should have
X****r
发帖数: 3557
2
单元测试是一个很好的习惯,我的看法是凡是对最终产品有贡献的代码
都必须有单元测试。被测试的单元应该有着尽可能清晰的界面,你最终
会发现这样的设计会导致更灵活的代码,即使不是为了测试而是将来的
代码重构也是有利的。
你这里的情况有两种可能的解决方向。如果foo这个函数和X的其他成员
耦合程度很高的话,你可以着重于测试foo所提供的功能,就像实际的
使用者一样来使用foo,包括调用X的其他函数(它们本身也被其他单元
测试所覆盖),从而确定foo的正确性。比如:
void XTest::testFoo() {
X x;
// setup x here.
x.foo();
// assert the state of x here.
}
另一方面,如果foo这个函数本身相对独立的话,你可以把它的实现作
为一个不依赖于X的其他成员的函数分出来,这样这个实现函数就可以
被单独测试:
class X {
public:
void foo() { fooImpl(abc_, p); }
private:
ABC abc_;
Node * p;
void

【在 w*******a 的大作中提到】
: 很恶心, 公司要求写unit testing code.
: class X
: {
: ...
: public:
: void foo()
: {
: ...
: abc_.doSomething();
: }

w*******a
发帖数: 21
3
楼主讲得很清晰, 看来经验很丰富。谢谢
不过我感觉有时候为了测试而把程序结构变得 反而不是很合理, 就像你所说的建立一
个私有的constructor to set up reference or pointer of abc.

【在 X****r 的大作中提到】
: 单元测试是一个很好的习惯,我的看法是凡是对最终产品有贡献的代码
: 都必须有单元测试。被测试的单元应该有着尽可能清晰的界面,你最终
: 会发现这样的设计会导致更灵活的代码,即使不是为了测试而是将来的
: 代码重构也是有利的。
: 你这里的情况有两种可能的解决方向。如果foo这个函数和X的其他成员
: 耦合程度很高的话,你可以着重于测试foo所提供的功能,就像实际的
: 使用者一样来使用foo,包括调用X的其他函数(它们本身也被其他单元
: 测试所覆盖),从而确定foo的正确性。比如:
: void XTest::testFoo() {
: X x;

d****p
发帖数: 685
4
基本思路是加编译开关 -- 测试关联的代码在发布时可以很容易地被关掉

【在 w*******a 的大作中提到】
: 楼主讲得很清晰, 看来经验很丰富。谢谢
: 不过我感觉有时候为了测试而把程序结构变得 反而不是很合理, 就像你所说的建立一
: 个私有的constructor to set up reference or pointer of abc.

1 (共1页)
进入Programming版参与讨论
相关主题
Scala,F#或haskell怎么用DI?内存泄露了吗?
MOCK测试 对软件质量的影响?Why this is a dangling pointer
node promise发出reject之后,是不是只能hit catch block ?定义linked list最后一行什么意思?
one more c++ question请教unique_ptr vs auto_ptr
怎么把const T& 作为一个class的member菜鸟读C++ STL源程序的疑问
多少公司用 java guice 这烂玩意?这段C++程序有错吗?
C++的一个问题Andriod上有比较好的Mock Up的工具啊
C++ template preprocessor菜鸟以为C++的unit test功能没有java强大,是一大缺点
相关话题的讨论汇总
话题: foo话题: abc话题: class话题: 测试话题: node