【发布时间】:2014-01-21 14:12:43
【问题描述】:
在调试模式下运行单元测试时,我正在使用 WinPython 2.7.5.3 在 PyCharm 3.0.2 中工作,所有这些都通过了。但是,如果我正常运行它们,我有一个失败 - 特别是下面代码的结果会在结果列表中返回一个额外的意外项。
这是失败的测试:
def test4(self):
bz = BezNet()
bz.insert([P(1, 1), P(2, 3)])
bz.insert([P(1, 10), P(2, 30)])
nodes = [n for n in bz.nodes]
self.assertEqual(len(nodes), 4)
edges = [e for e in bz.edges]
self.assertEqual(len(edges), 2)
bbzz = bz.separate()
self.assertEqual(len(bbzz), 2) # assertioin fails (len==3) but ONLY in run mode
这是正在测试的 BezNet 类部分的摘录。
....
def _visit(self, a, nodes, edges):
if a in nodes:
return None
for b in a._out:
edges[a, b] = self._edges[a, b]
self._visit(b, nodes, edges)
nodes.add(a)
def separate(self):
result = []
while len(self._nodes):
nodes = set()
edges = {}
for x in self._nodes:
start = x
break
self._visit(start, nodes, edges)
part = BezNet()
part._nodes = nodes
self._nodes.difference_update(nodes)
part._edges = edges
for e in edges:
del self._edges[e]
result.append(part)
return result
....
课程的其余部分相当大,所以我不会在此处包含它,除非有人认为它可能有错,在这种情况下我将进行编辑。 [我还没有为我的代码中的错误寻找解决方案,只是在工具运行时如何跟踪它]
我的问题是,在幕后可能发生了什么,以及可以使用哪些策略来追踪问题?
【问题讨论】:
-
看起来你有自己的Heisenbug。
-
@MartijnPieters 谢谢,他们说命名问题是解决方案的一半(或类似的东西)
标签: python debugging pycharm methodology