小编Kon*_*tin的帖子

使用谷歌测试来检查回调

我有一个类Foo存储指向回调的指针.可以使用方法调用回调InvokeCallback().

void* SomeCallback(void* a) {

  return (void*)(*(int*)a + 10);

}


class Foo {

public: 

    typedef void* (*CallbackFunction)(void*);

    SetCallback(CallbackFunction callback) {
        this->callback = callback;
    }

    InvokeCallback() {
        callback(20);
    }

private:

    CallbackFunction callback;

}
Run Code Online (Sandbox Code Playgroud)

如何测试(使用谷歌测试)SomeCallback()使用特定参数调用(在上述情况下为20)?

编辑:

我提出了一个非常难看的解决方案.测试通过,但最后出现了新的错误ERROR: 1 leaked mock object found at program exit.

class MockCallbackClass {
public:
    MOCK_METHOD1(SomeCallback, void*(void*));
};

MockCallbackClass mock; // Nasty global variable

void* __SomeOtherCallback(void* a) {

    return mock.SomeCallback(a);

}

TEST(Callback, MockCallback) {

    Foo foo;
    foo.SetCallback(__SomeOtherCallback);
    EXPECT_CALL(mock, SomeCallback((void*)10)).WillOnce(testing::Return((void*)20));

}
Run Code Online (Sandbox Code Playgroud)

c++ googletest googlemock

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

PySerial:如何理解从串口读取时发生的超时?

我正在使用PySerial串行端口读取,如下面的代码所示. CheckReadUntil()读取我发送到串行端口的命令的输出,直到符号序列readUntil在串行输出中.

...

self.ser = serial.Serial(comDev, 115200, timeout=10)

...

#Function that continue to read from Serial port until 'readUntil' 
#sequence of symbols appears
def CheckReadUntil(self, readUntil):
    outputCharacters = []
    while 1:
        ch = self.ser.read()
        outputCharacters += ch
        if outputCharacters[-len(readUntil):]==readUntil:
            break
    outputLines = ''.join(outputCharacters)
    return outputLines
Run Code Online (Sandbox Code Playgroud)

但是,如果没有序列readUntil(出于任何原因),我只是CheckReadUntil()永远陷入了这个功能.该设置timeout=10设置超时,所以我陷入了一个循环,每10秒迭代一次,什么也不做,只是等待.

怎么可能理解有一个超时事件所以我可以退出无限循环?输出长度可能不同.

python timeout serial-port pyserial

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

Dateutil包:两个日期之间的绝对差异(秒)

我使用Python和'dateutil'包.我有两个日期'date1'和'date2'从一些字符串解析:

import dateutil.parser
date1 = dateutil.parser.parse(string1,fuzzy=True)
date2 = dateutil.parser.parse(string2,fuzzy=True)
Run Code Online (Sandbox Code Playgroud)

如何在'date1'和'date2'之间获得绝对(非负)时间差(以秒为单位)?只有一个数字.

python date python-dateutil

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

使用 Google Test 检查类方法的调用

使用谷歌测试,我想检查如果我调用另一个类方法,是否会调用某些类方法。

#include "gtest/gtest.h"

class Foo {

    void DoWorkPrivate(int i) {}

public:

    void DoWork(int i) {}

    void Run() {
        for (int i = 1; i <= 5; i++) {
            DoWork(i);
            DoWorkPrivate(i);
        }
    }
};

TEST(FooTest, Run) {
    Foo foo;    
    foo.Run(); // Need to check that DoWork() and DoWorkPrivate() are invoked
}
Run Code Online (Sandbox Code Playgroud)

问题:

如何检查DoWork()DoWorkPrivate()被使用某些参数(1、2、3、4、5)调用 5 次?

c++ googletest

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

删除Python中用点分隔的字符串的最后一部分

如何以优雅的方式转换字符串,如:

'test.test1.test2'
'test.test3.test4'
Run Code Online (Sandbox Code Playgroud)

成为这样的字符串:

'test.test1'
'test.test3'
Run Code Online (Sandbox Code Playgroud)

python regex

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

静态类变量和Python中的`self`

为什么下面的例子表现不一样?

示例1:foo似乎表现为特定于各种对象的类变量

class A: 
    foo = 1
a, b = A(), A()
a.foo = 5
print b.foo
----------------
Output: 1
Run Code Online (Sandbox Code Playgroud)

示例2:foo似乎表现得像所有对象的静态类变量一样.也许这种行为与作为指针的列表有关.

class A: 
    foo = []
a, b = A(), A()
a.foo.append(5)
print b.foo
----------------
Output: [5]
Run Code Online (Sandbox Code Playgroud)

示例3:不起作用

class A: 
    self.foo = []
a, b = A(), A()
a.foo.append(5)
print b.foo
----------------
Output: Error
Run Code Online (Sandbox Code Playgroud)

python oop static class self

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

实现 TFTP、FTP、SFTP 服务器的 Python 包

我正在使用tftpy在我的 Python 程序中创建 TFTP 服务器,它的工作原理很棒。但是,我需要其他类型的服务器:TFTP、FTP、SFTP。我可以使用什么包来支持所有这些?

python ftp sftp python-2.7 tftp

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

pyspark 数据帧的缓慢过滤

我有一个关于过滤 Pandas 和 pyspark 数据帧时的时间差的问题:

import time
import numpy as np
import pandas as pd
from random import shuffle

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

df = pd.DataFrame(np.random.randint(1000000, size=400000).reshape(-1, 2))
list_filter = list(range(10000))
shuffle(list_filter)

# pandas is fast 
t0 = time.time()
df_filtered = df[df[0].isin(list_filter)]
print(time.time() - t0)
# 0.0072

df_spark = spark.createDataFrame(df)

# pyspark is slow
t0 = time.time()
df_spark_filtered = df_spark[df_spark[0].isin(list_filter)]
print(time.time() - t0)
# 3.1232
Run Code Online (Sandbox Code Playgroud)

如果我将 的长度list_filter增加到 10000,那么执行时间是 0.01353 和 17.6768 秒。isin 的 Pandas 实现 …

python pandas pyspark pyspark-sql

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

Python:从行中提取整数

如何从以下三个数字的字符串中提取三个CPU利用率值?

Total CPU Utilization             83.6%   95.4%   30.7%
Run Code Online (Sandbox Code Playgroud)

python regex string

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

省略列表理解中的元素

有以下简单的脚本:

def MyFunction(digit):
    if digit < 4:
        return digit
    else:
        return None

A = [1, 2, 3, 4, 5]
B = [MyFunction(x) for x in A]
print(B) # [1, 2, 3, None, None]
Run Code Online (Sandbox Code Playgroud)

题:

是否有可能以MyFunction()某种方式重写,所以B变得等于[1, 2, 3]没有None?请不要建议我if在列表理解中使用表达式,在列表理解之后处理B等.

python list-comprehension

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