我的using valType = std::variant<char, short, long, float, double>;
using varType = std::variant<MyClass<char>, ..., MyClass<double>>;
// Read this from some file, or whatever
auto values = std::vector<valType> { 3, 2.6f, 17.2, 1523l };
std::vector<varType> paramList = MyFunctionThatReadsThroughParamToNextParam();
for (size_t i = 0; i < values.size(); i++) {
paramList[i].SetValue(values[i]);
// where the type contained in values[i] matches the type expected by paramList[i]
// ideally this would throw if the types were incorrect, but really
// any defined behaviour here would be great.
}
TestCase中有以下代码:
unittest
但是,当我运行TestLogging测试用例时,我得到了
AssertionError:预期的电话:incr(你&#39; pegasus.logger.WARNING.root&#39;)
未调用
我希望这个电话会成功。为什么会这样?
答案 0 :(得分:1)
当我调试此行为时,我发现root_logger.manager.disable
设置为30
的值,这意味着没有打印所有级别为WARNING或更低级别的日志记录。
日志记录Manager
对象没有记录在我可以轻松找到的任何位置,但它是描述和存储所有记录器的对象,包括根记录器。它在代码here中定义。我发现在测试用例的其他地方有logging.disable(logging.WARNING)
的调用。这会将root_logger.manager.disable
的值设置为30.管理员禁用级别胜过记录器的有效级别(请参阅this code)。
通过在测试用例开始时将行logging.disable(logging.NOTSET)
添加到我的测试用例中,我确保将日志管理器disable
属性设置为默认值0,这导致了我的测试用例通过。