2013-01-15 36 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,这是应用到我们构建服务器和我的同事的开发中,但不是我开发框。我卸载了构建服务器上的更新,重新启动,问题就消失了!我想微软还没有针对这个问题进行单元测试。 :-)

相关问题