DateTimeOffset类型的mock属性会导致Windows Store测试库中的InvalidProgramEx
本文关键字:测试 Store InvalidProgramEx Windows mock 类型 属性 DateTimeOffset | 更新日期: 2023-09-27 18:09:21
我刚开始使用Windows Store应用程序,并决定在我的项目中使用测试驱动开发。因为我之前有过使用NUnit的经验,这是我选择的库,然后我开始使用MoqRT,这是一个网站推荐的用于Windows Store应用程序的mock库。
我面临的问题是,当我嘲笑一个对象,有一个DateTimeOffset
作为属性的类型。我收到以下异常:
系统。InvalidProgramException:公共语言运行库检测到无效程序
在Castle.Proxies.ITimeProxy_1.get_Expires ()… stacktrace的剩余部分由于清晰度而被删除
现在,当我在属性上使用DateTimeOffset
类型时,只会出现,并且mock(例如字符串属性)工作得非常好。
using System;
using Moq;
using NUnit.Framework;
namespace StoreTesting
{
[TestFixture]
public class UnitTest1
{
[Test]
public void TestMethod1()
{
// Mock
DateTimeOffset expirydate = DateTimeOffset.UtcNow.AddSeconds(2000);
var time = new Mock<ITime>();
time.Setup(m => m.Expires).Returns(expirydate);
// Act
TimeDependant obj = new TimeDependant(time.Object);
var result = obj.Act();
// Assert
Assert.That(result, Is.EqualTo(expirydate));
}
}
public class TimeDependant
{
private readonly ITime time;
public TimeDependant(ITime time)
{
this.time = time;
}
public DateTimeOffset Act()
{
return time.Expires;
}
}
public interface ITime
{
DateTimeOffset Expires { get; }
}
}
如果我子类化ITime
并使用它而不是Mock,一切都很好。
在搜索这个时,似乎异常的主要问题与"太大的方法"有关,但是看到这只发生在DateTimeOffset
类型的属性上,我不知道这如何影响我的测试,因为其他属性也应该失败,如果它是关于那方面的事情。
另一件事是,我正在使用NUnit应用程序运行测试,因为测试不会在Visual Studio 2012中运行,因为它是Windows Store应用程序(这是另一个问题)。我不知道这是否也会影响行为。
我要问的问题是;是否有一种方法可以模拟具有DateTimeOffset
类型属性的接口,而不会引发异常?
你不能使用Moq与Windows Store运行时,因为winrt不允许动态代码生成。
我这样做只是想创建一个简单的。net框架库,它引用了我所有的代码,我想测试,从Win Store项目
如何使用Moq和nUnit为Windows运行库编写单元测试