2013-01-15 39 views
1

無效程序錯誤我有以下代碼公共語言運行時檢測到的在單元測試

this.SafeUpdate(rate, Guid.Parse(import.myGuid), c => c.myGuid); 

SafeUpdate基本上採用解析的GUID值,並將其應用於該速率對象上的myGuid屬性。這在我的前端工作正常,但在單元測試中運行時會拋出「CLR detected ...」錯誤。奇怪的是DateTime.Parse和int.Parse的相同語句工作正常。它只是Guid和小數失敗。我不相信解析錯誤(當解壓縮到一個單獨的變量時,它具有正確的解析值)。我不相信這是嘲諷,因爲該聲明適用於除guid和小數以外的所有其他類型。有任何想法嗎?

+0

哪個單元測試框架? –

+0

你可以添加堆棧跟蹤嗎?我可能會遇到類似的問題,但僅限於1月10日以後。 –

回答

2

昨天我們在構建服務器上遇到了類似的錯誤。我們的異常是由DataContractSerializer的ReadObject()方法拋出的。

System.InvalidProgramException: Common Language Runtime detected an invalid program. 
at System.Xml.EncodingStreamWrapper..ctor(Stream stream, Encoding encoding) 
at System.Xml.XmlUTF8TextReader.SetInput(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose) 
at System.Xml.XmlDictionaryReader.CreateTextReader(Stream stream, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose) 
at System.Xml.XmlDictionaryReader.CreateTextReader(Stream stream, XmlDictionaryReaderQuotas quotas) 
at System.Runtime.Serialization.XmlObjectSerializer.ReadObject(Stream stream) 

我們已經編寫了一個控制檯應用程序來完成這一件事。它運行時沒有錯誤,但在簡單的單元測試中失敗。我們使用Gallio/MbUnit 3.4.11.0作爲我們的測試框架,其目標是.net 4.0。

using System; 
using System.IO; 
using System.Runtime.Serialization; 
using MbUnit.Framework; 

namespace TestApp 
{ 
    [TestFixture] 
    class Program 
    { 
     static void Main() 
     { 
      FooBar(); 
      Console.ReadKey(); 
     } 

     public static void FooBar() 
     { 
      var type = typeof(string); 
      var foo = "foo"; 

      using (var stream = new MemoryStream()) 
      { 
       var serializer = new DataContractSerializer(type); 
       serializer.WriteObject(stream, foo); 
       stream.Seek(0, SeekOrigin.Begin); 
       var deserializer = new DataContractSerializer(type); 
       var bar = deserializer.ReadObject(stream); 
       Console.WriteLine(bar); 
      } 
     } 

     [Test] 
     public void Test() 
     { 
      FooBar(); 
     } 
    } 
} 

該應用程序運行良好,但測試拋出。奇怪的是,這個測試通過我的開發箱,但在我們的構建服務器以及同事的開發箱上失敗。很明顯,我的開發箱有一些不同之處,可以讓測試通過,但我還沒有找到這種差異。

更新1 System.dll中對我的dev的盒子的版本是4.0.30319.296但在構建服務器和我的同事的開發框上它是4.0.30319.1001。但System.Xml.dll和System.Runtime.Serialization.dll在4.0.30319.1處完全相同。

更新2 快速谷歌搜索「4.0.30319.1001」返回此安全更新,http://support.microsoft.com/kb/2742595,這是應用到我們構建服務器和我的同事的開發中,但不是我開發框。我卸載了構建服務器上的更新,重新啓動,問題就消失了!我想微軟還沒有針對這個問題進行單元測試。 :-)

相關問題