2014-10-02 38 views
2

我在構建服務器上的單個測試項目有一些問題。項目中的一些測試將AutoFixture與AutoMoq結合使用。重定向Moq參考AutoFixture

由於AutoMoq使用較舊版本的Moq的比我們其它方式使用一個,我們在app.config中重定向(由AutoMoq的NuGet腳本由我承擔):

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Moq" publicKeyToken="69f491c39445e920" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.2.1409.1722" newVersion="4.2.1409.1722" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Ploeh.AutoFixture" publicKeyToken="b24654c590009d4f" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.20.2.0" newVersion="3.20.2.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

測試運行沒有

Test(s) failed. System.IO.FileLoadException : Could not load file or assembly 'Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
    at Ploeh.AutoFixture.AutoMoq.MockPostprocessor.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.CustomizationNode.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.TracingBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.TerminatingWithPathSpecimenBuilder.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.BehaviorRoot.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.RecursionGuard.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Fixture.Create(Object request, ISpecimenContext context) 
    at Ploeh.AutoFixture.Kernel.SpecimenContext.Resolve(Object request) 
    at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context, T seed) 
    at Ploeh.AutoFixture.SpecimenFactory.Create[T](ISpecimenContext context) 

爲什麼起訂量引用(4.0.10827.0顯然):(使用AutoFixture,AutoMoq和起訂量之間的多)問題對開發商的機器,而是一個項目時,與TeamCitys NUnit的亞軍運行在我拋出這個沒有重定向到4.2.1409.1722?

我檢查了構建服務器的工作目錄和app.config和dll看起來不錯。

+2

FWIW,讓人想起這個問題:HTTPS: //github.com/AutoFixture/AutoFixture/issues/260 – 2014-10-02 10:33:30

+0

很難說它是否是同一個問題,因爲報告沒有提供詳細信息。 – Holstebroe 2014-10-02 10:45:01

回答

0

正如在the relevant AutoFixture issue中所解釋的那樣,AutoFixture不會也不會依賴於最新的緣故。

您的錯誤信息與任何AutoFixture本身所要求的任何版本無關,因此您的環境中的某些內容是唯一可能的解釋。 Id'正在使用\\live.sysinternals.com\tools\procexp.exe來查看來自哪裏。

+0

在由構建服務器運行的單元測試中使用procexp(這是一個僅構建服務器的問題)可能很難。我最終重寫了沒有AutoFixture的測試。所有其他使用AutoFixture andMoq的測試項目都能正常工作。 – Holstebroe 2014-10-22 11:29:29

+1

我的觀點是Moq'4.2.1409.1722' req絕對不是來自AF,因此你需要找到你的環境中引入了什麼衝突。這不像是有一個流浪的電子或AutoFixture的東西造成這種情況。當你根源導致它會變得非常無聊。雖然沒有依賴關係的重寫總是有其優點,但根源導致的東西,並找出你和/或你的構建腳本做錯了什麼。 – 2014-10-22 12:57:34