使用Python 2.6.6
所以我刚刚了解到以下内容:
myLock.acquire()
doStuff()
myLock.release()
Run Code Online (Sandbox Code Playgroud)
可以替换为:
with myLock:
doStuff()
Run Code Online (Sandbox Code Playgroud)
我的问题是,使用前面的代码,我可以通过模拟Lock来单元测试锁被用来保护做事.但是对于后者,我的单元测试现在(预期)失败,因为没有调用acquire()和release().因此,对于后一种情况,我如何验证锁是否用于保护做事?
我更喜欢第二种方法,因为它不仅更简洁,而且我不可能编写忘记解锁资源的代码.(不是说我以前做过那个......)
我有一个cmake项目,成功完成了我想要的一切.但我有大约100个文件,我厌倦了看到生成的巨大输出,每次只需要重新编译单个文件时每个文件30行.
要清楚,我正在编译cmake --build . 以获得此结果.
我需要传递给编译器(或MSBuild)以跳过它检查未更改文件的打印的参数是什么?在Visual Studio中编译项目不会创建所有这些可视垃圾.
这是我为每个未更改的文件获取的输出:
Project "C:\noscan\working\proj\build\ALL_BUILD.vcxproj" (1) is building "C:\noscan\working\proj\build\os\src\oslib.vcxproj" (54) on node 1 (default targets).
InitializeBuildStatus:
Creating "oslib.dir\Debug\oslib.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
PreBuildEvent:
Description: Automatic MOC for target oslib
setlocal
cd C:\noscan\working\tadet\build\os\src
if %errorlevel% neq 0 goto :cmEnd
C:
if %errorlevel% neq 0 goto :cmEnd
C:\cmake\bin\cmake.exe -E cmake_autogen C:/noscan/working/tadet/build/os/src/CMakeFiles/oslib_autogen.dir Debug
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python 2.6.6
我想要做的是用 Mock 替换对象的创建,以确保进行正确的调用。应该是直截了当的。
我的模块:
import dir.SubModule
class Cls( object ):
def Start( self ):
self.__obj = dir.SubModule.SubCls()
self.__obj.foo()
Run Code Online (Sandbox Code Playgroud)
我的测试:
import MyModule
import unittest
from mock import Mock, MagicMock, patch
class MyTest( unittest.TestCase ):
def setUp( self ):
self.uut = MyModule.Cls()
def test_one( self ):
with patch( 'dir.SubModule.SubCls', spec=True ) as mockObj:
print "mock calls before"
print mockObj.mock_calls
self.uut.Start()
print "called: " + str( mockObj.called )
print "foo called: " + str( mockObj.foo.called )
print "call_count: " + …Run Code Online (Sandbox Code Playgroud)