2014-02-28 59 views
0

在下面的設計例子中,我想在foo.psm1上寫一個Foo的單元測試。爲了做到這一點,我必須模擬foo.psm1導入的bar.psm1中的函數Bar。Powershell:如何模擬嵌套模塊功能

但是,模擬不起作用,因爲foo.psm1只能識別它導入的Bar的版本。我怎樣才能做到這一點?

**使所有文件.ps1解決此問題,但我不想使用.ps1文件,因爲我需要模塊附帶的所有元數據和發現。

foo_test.ps1

import-module 'C:\DEV\powershell\mocks\foo.psm1' 

function Bar { 
    write-host 'BarMock' 
} 

Foo #outputs Bar not BarMock 

foo.psm1

import-module 'C:\DEV\powershell\mocks\bar.psm1' 

function Foo { 
    Bar 
} 

bar.psm1

function Bar { 
    write-host 'Bar' 
} 

任何幫助深表感謝。

**更新 - 解決方案由史蒂夫Murawski提供(任何錯誤歸因於我)。

您需要將導入模塊的內容作爲字符串獲取,並使用Invoke-Expression導入它,以便將所有內容導入到全局範圍中。

新foo_test.ps1

$contents = gc 'C:\DEV\powershell\mocks\foo.psm1' | out-string 
invoke-expression $contents 


function Bar { 
    write-host 'BarMock' 
} 

Foo 

回答

0

你試過刪除模塊,然後重新導入。

+0

是的,我已經嘗試刪除並強制導入foo_test.ps1。它沒有解決問題。 –