gpt4 book ai didi

c++ - 单元测试的条件推导

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:04 25 4
gpt4 key购买 nike

我正在编写封装硬件驱动程序(用户空间)的单元测试,我使用的设计模式如下:

class uio
{
virtual uint32_t readbit(...);
virtual bool writebit(...);
// other driver related functions
// ...
};

class uio_test : public uio
{
virtual uint32_t readbit(...) override { /* don't talk to hardware, send back test data */ }
virtual bool writebit(...) override { /* don't talk to hardware, write test data */ }
};

class spi : public uio
{
// spi related functions
};

class i2c : public uio
{
// i2c related functions
};

我的问题是如何使 spi 和 uio 根据模块(真实程序与 gtest)正确地从 uio 或 uio_test 继承。例如,我看过条件语句:

template<bool test>
class spi : public std::conditional<test, uio_test, uio>

这适用于所有对象都简单地从 main 派生的世界。

/* main.cpp */
spi<false> s;
s.init();
s.writebit();

/* gtest_main.cpp */
spi<true> s;
ASSERT_TRUE(s.init());
ASSERT_EQ(/* read/write test bits, etc*/);

但是uio派生对象在整个程序的其他专门类中使用,我看不到条件构造的好方法,例如:

class temperature_monitor
{
createBuses();
spi<???>* spictrl_;
};

/* perhaps derive test classes, easy since most high level objects are singletons */
temperature_monitor::createBuses()
{
if (testmode)
spictrl_ = new spi<true>;
else
spictrl_ = new spi<false>;
}

希望每个人都清楚这一点。在他们被问到之前,我会回答几个问题:

问。预处理器条件如何?

一个。不,如果可能的话,永远不要。

问。为什么要为像 spi 这样的低级 bit banging 驱动程序编写单元测试?

一个。为什么不呢,有一些内部逻辑在进行,我宁愿在单元测试中捕获错误,也不愿尝试调试一个愚蠢的缺失 0 一天。

最佳答案

我认为你想要的是一种策略模式。 uio 提供了一个非虚拟接口(interface)和一个指向实现的指针。您认为有一个虚拟接口(interface)并向 uio 对象提供一个普通或测试实例,而不是试图在中间插入继承。使用策略模式甚至允许您插入额外的实现。

关于c++ - 单元测试的条件推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30357190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com