我有一个包含我的Python单元测试的目录.每个单元测试模块的形式为test _*.py.我正在尝试创建一个名为all_test.py的文件,您猜对了,运行上述测试表单中的所有文件并返回结果.到目前为止,我尝试了两种方法; 都失败了.我将展示这两种方法,我希望那里的人知道如何正确地做到这一点.
对于我的第一次勇敢的尝试,我想"如果我只是在文件中导入我的所有测试模块,然后调用这个unittest.main()doodad,它会工作,对吧?" 好吧,事实证明我错了.
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
if __name__ == "__main__":
unittest.main()
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到的结果是:
$ python all_test.py
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Run Code Online (Sandbox Code Playgroud)
对于我的第二次尝试,我可以,也许我会尝试以更"手动"的方式完成整个测试.所以我试着在下面这样做:
import glob
import unittest
testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print …Run Code Online (Sandbox Code Playgroud) 对于SciPy稀疏矩阵,可以使用todense()或toarray()转换为NumPy矩阵或数组.反向的功能是什么?
我搜索过,但不知道哪些关键字应该是正确的.
当我尝试修改项目的值时,我遇到了一个问题,因为它只是一个只读字段.
KeyValuePair<Tkey, Tvalue>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的替代品,如:
Dictionary<Tkey, Tvalue>
Run Code Online (Sandbox Code Playgroud)
但我有同样的问题.有没有办法将值字段设置为新值?
如果我运行以下代码:
x = 1
class Incr:
print(x)
x = x + 1
print(x)
print(x)
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
1
Run Code Online (Sandbox Code Playgroud)
没问题,这正是我的预期.如果我做以下事情:
x = 1
class Incr:
global x
print(x)
x = x + 1
print(x)
print(x)
Run Code Online (Sandbox Code Playgroud)
它打印:
1
2
2
Run Code Online (Sandbox Code Playgroud)
也是我所期待的.没有问题.
现在,如果我开始按如下方式创建增量函数:
x = 1
def incr():
print(x)
incr()
Run Code Online (Sandbox Code Playgroud)
它按照我的预期打印1.我假设它这样做是因为它无法x在其本地范围内找到,因此它搜索其封闭范围并找到x它.到目前为止没有问题.
如果我这样做:
x = 1
def incr():
print(x)
x = x + 1
incr()
Run Code Online (Sandbox Code Playgroud)
这在回溯中给出了以下错误:
UnboundLocalError:赋值前引用的局部变量'x'.
为什么Python不只是搜索封闭空间,x因为它找不到x像我class Incr一样用于赋值的值?请注意,我不是在问这个功能如何工作.我知道如果我执行以下操作,该功能将起作用:
x = 1
def incr(): …Run Code Online (Sandbox Code Playgroud) 我试过这段代码:
import cv2
image = cv2.imread("sample.jpg")
pixel = image[200, 550]
print pixel
Run Code Online (Sandbox Code Playgroud)
但我得到的错误是:
'Nonetype'没有属性错误getitem
执行第三行代码后会显示此错误.
如何#initialize使用RSpec 指定行为?例如这里:
generator.rb
class Generator
attr_accessor :seed
def initialize(seed = nil)
@seed = seed || pick_seed
end
def pick_seed
Time.now.to_i
end
end
Run Code Online (Sandbox Code Playgroud)
generator_spec.rb
require 'generator'
describe Generator
it "calls 'pick_seed' method unless seed specified" do
end
end
Run Code Online (Sandbox Code Playgroud)
我想设置pick_seed从#initialize方法调用的方法的期望.
我需要将数字从1-99变成单词.这是我到目前为止所得到的:
num2words1 = {1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', \
6: 'Six', 7: 'Seven', 8: 'Eight', 9: 'Nine', 10: 'Ten', \
11: 'Eleven', 12: 'Twelve', 13: 'Thirteen', 14: 'Fourteen', \
15: 'Fifteen', 16: 'Sixteen', 17: 'Seventeen', 18: 'Eighteen', 19: 'Nineteen'}
num2words2 = ['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']
def number(Number):
if (Number > 1) or (Number < 19):
return (num2words1[Number])
elif (Number > 20) or (Number < 99):
return (num2words2[Number])
else:
print("Number Out Of …Run Code Online (Sandbox Code Playgroud) 我们必须numpy.testing.assert_array_equal断言两个数组相等.
但是,最好的方法是做什么numpy.testing.assert_array_not_equal,即确保两个数组不相等?