我知道我如何使用这些术语,但我想知道是否有单独测试的伪造,模拟和存根的可接受定义?你如何为你的测试定义这些?描述您可能使用每种情况的情况.
以下是我如何使用它们:
假:一个实现接口但包含固定数据而没有逻辑的类.根据实施情况,简单地返回"好"或"坏"数据.
Mock:一个实现接口的类,允许动态设置值以返回/异常从特定方法抛出,并提供检查是否已调用/未调用特定方法的功能.
存根:类似于模拟类,但它不提供验证方法是否已被调用/未调用的能力.
模拟和存根可以由模拟框架手动生成或生成.伪造的类是手工生成的.我主要使用模拟来验证我的类和依赖类之间的交互.一旦我验证了交互并且正在通过我的代码测试备用路径,我就会使用存根.我主要使用假类来抽象出数据依赖性,或者每次使用模拟/存根都太繁琐.
我很想知道如何将数字舍入到最接近的第十个整数.例如,如果我有:
int a = 59 / 4;
Run Code Online (Sandbox Code Playgroud)
以浮点计算的14.75; 如何将数字存储为"a"中的15?
考虑一种情况,其中某个模拟函数应该被调用多次,每次在某个参数中使用不同的值.我想验证函数确实被调用一次,并且在某个值列表中每个值只调用一次(例如1,2,5).
另一方面,我想避免定义一个序列,因为它会决定某个顺序,这是一个我希望保持自由的实现细节.
对于这种情况,是否有某种匹配器或其他解决方案?
我不确定这是否会以任何方式影响解决方案,但我打算在上面的列表中使用不同x值的WillOnce(Return(x)).
在谷歌文档模拟说:
重要提示: Google Mock 要求在调用模拟函数之前设置期望值,否则行为是undefined。特别是,您不能将 EXPECT_CALL() 和对模拟函数的调用交织在一起。
有谁知道这个限制背后的任何细节?我有许多单元测试肯定违反了这条规则,但是似乎运行正常。
我需要检测给定的函数是否已使用一组特定的参数被精确调用一次。
EXPECT_CALL(Mock_Obj, func("abc")).Times(1)
但是可以使用不同的参数多次调用该函数。
我该如何表达?
googlemock ×3
unit-testing ×3
c++ ×2
googletest ×2
c ×1
definition ×1
expectations ×1
gmock ×1
int ×1
math ×1
mocking ×1
rounding ×1
stub ×1
terminology ×1