小编Lav*_*ven的帖子

从__init__中删除工作以帮助进行单元测试

这个问题的关键是帮助单元测试.如果我有一个繁忙的__init__(即__init__复杂的初始化),我不能简单地实例化一个类的对象,但我需要模拟/存根调用在依赖关系中的所有方法__init__.

为了说明这个问题,这里是一个例子:

class SomeClass(object):
    def __init__(self, dep1, dep2, some_string):
        self._dep1 = dep1
        self._dep2 = dep2
        self._some_string = some_string

        # I would need to mock everything here (imagine some even more
        # complicated example)
        for dep2element in self._dep2:
            dep2element.set_dep(dep1)
        self._dep1.set_some_string(some_string)

    def fun1(self):
        ...
    def fun2(self):
        ...
    def fun3(self):
        ...
Run Code Online (Sandbox Code Playgroud)

要测试这些fun*功能,每个测试都必须执行复杂的构造.

class TestSomeClass(TestCase):
    def create_SomeClass(self, some_string):
        dep1 = Mock()
        # mock everything required by SomeClass' constructor

        dep2 = Mock()
        # mock everything required by …
Run Code Online (Sandbox Code Playgroud)

python object-initializers

7
推荐指数
2
解决办法
2487
查看次数

fstream 读写成员函数的正确转换

尽管有很多关于 reinterpret_cast 主题的文章,以及它有多糟糕,但我仍然对避免它的最佳方法感到困惑,尤其是在处理诸如从 fstream 读取和写入之类的函数时。所以,这是我的困境......

假设我们有一个整数数组,我们想用文件中的一些数据填充它。

std::ifstream iFile( ... );

// presume that the type of this array is not a matter of choice
int *a = new int[ 100 ]; 
Run Code Online (Sandbox Code Playgroud)

我们可以阅读一些不同的演员表:

iFile.read( (char *)a, sizeof( int ) * 100 );
iFile.read( reinterpret_cast< char * >( a ), sizeof( int ) * 100 );
iFile.read( static_cast< char * >( static_cast< void * >( ( a ) ), sizeof( int ) * 100 );
Run Code Online (Sandbox Code Playgroud)

第一个(C 风格)已经过时,我们在 C++ 中引入了新的风格转换,这是有充分理由的。第二个是不可移植的,不提供任何保证。第三个写起来很乏味,破坏了乐趣。

有什么替代方法吗,我应该怎么做?

编辑:

目标是使代码尽可能可移植且符合标准。

c++ fstream reinterpret-cast

6
推荐指数
1
解决办法
4120
查看次数

3
推荐指数
1
解决办法
4708
查看次数

用C ++ ISO标准解释对基址的反引用指针

我想了解标准关于将指针解引用到基的观点,但是我在寻找它方面没有任何进展。以这两个类为例:

class Base
{
  public:
    virtual void do_something() = 0;
};

class Derived : public Base
{
  public:
    virtual void do_something();
};

void foo2(Base *b)
{
     Base &b1 = *b; // how this work by standard?
}

void foo()
{
  Derived *d = new Derived();
  foo2(d); // does this work by standard?
}
Run Code Online (Sandbox Code Playgroud)

因此,基本上,如果取消引用指向类型D的对象的类型B的指针,切片会在适当的位置发生,还是会临时出现?我倾向于认为临时不是一个选择,因为这意味着临时是抽象类的实例。

不管真相如何,我都希望能有一个指向ISO标准的指针。(或者第三,就此而言。:))

编辑:

我提出的观点是,暂时不作为一种选择,因为它可能会以其行为方式行事,这是很合逻辑的,但我无法在标准中找到确认,而且我也不是普通读者。

编辑2:

通过讨论,很明显,我的问题实际上是关于取消引用指针机制的,而不是关于拼接或临时的。我感谢每个人都为我做的愚蠢,最后我得到了最令我困惑的问题的答案:为什么我找不到标准的东西……显然这是错误的问题,但是我有正确的答案。

n

c++ standards iso pointers dereference

1
推荐指数
1
解决办法
1622
查看次数

QtCreator和"运行CMake"

从QtCreator中的项目视图运行CMake("运行CMake"命令)时,会弹出CMake向导.这变得非常烦人,因为我是QtCreator新手,我不知道是否有任何补救措施.

期望的效果将是cmake的自动执行,而没有CMake向导的瘟疫.

c++ cmake qt-creator

0
推荐指数
1
解决办法
4054
查看次数