我有一个场景,我的同事正在编写我希望在我的模块中使用的函数。他为他的模块编写单元测试,而我正在为我的模块编写单元测试。自然,我想为我的测试模拟他的功能。
生产代码是用 C 语言编写的,并与单元测试代码分开编译为库。在链接时,我们正在为 Mock 版本覆盖产品的目标代码。但是,这会覆盖对该特定函数的所有调用,而不仅仅是在我的单元测试中。
这是一个例子。
使用 CPPUTEST,我可以MockSupport_c.h
随意使用。所以我为他的功能写了一个模拟。前任
实际功能:
int read_bytes(int count)
{
// for loop read the bytes
return success;
}
我用我想测试的函数调用上述内容
int read()
{
return read_bytes(256);
}
测试模块如下所示:
// create the mock
int read_bytes(int count)
{
mock_c()->actualCall("read_bytes");
return 1;
}
// test the code
TEST(group, test_name)
{
mock_c()->expectOneCall("read_bytes");
read();
mock_c()->checkExpectations();
}
编译单元测试时,链接器会将生产代码实现替换为模拟版本;但它会为对该函数的所有调用执行此操作。所以我的同事单元测试现在调用模拟,当它应该测试他的实际调用时。
如何让模拟仅在我的测试期间应用,而不覆盖我的同事电话?
或者我只是对所有这些工作方式不满意?