2013-04-14 2 views
1

방금 ​​Windows Store 응용 프로그램을 시작했고 프로젝트에서 테스트 중심 개발을 사용하기로 결정했습니다. 이전에 NUnit에 대한 약간의 경험이 있었기 때문에 그것이 나의 선택 라이브러리였습니다. 그리고 MoqRT를 사용하기 시작했습니다. MoqRT는 Windows Store 응용 프로그램에 사용할 mocking 라이브러리로서 웹 사이트에서 권장하는 조롱 라이브러리였습니다.DateTimeOffset 유형의 Mocking 속성은 Windows Store 테스트 라이브러리에서 InvalidProgramException을 발생시킵니다.

제가 직면 한 문제는 속성 유형이 DateTimeOffset 인 객체를 조롱했을 때의 문제입니다.

System.InvalidProgramException가 : 공용 언어 런타임이 Castle.Proxies.ITimeProxy_1.get_Expires()

... 스택 트레이스의 나머지 부분에서
이 때문에 제거 잘못된 프로그램을 감지 나는 다음과 같은 예외가 발생 이제

선명도 내가 재산에 DateTimeOffset 유형을 사용할 때 발생하고, 문자열 홍보 예를 들어 조롱 operty 완벽하게 작동합니다.

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 대신 모의의 모든뿐만 아니라 잘이다 사용을 서브 클래스합니다.

이 문제를 검색 할 때 예외의 주된 문제는 "너무 큰 방법"과 관련이있는 것처럼 보이지만이 문제는 유형이 DateTimeOffset 인 속성에만 발생하므로 내 테스트에 어떤 영향을 미치는지는 알지 못합니다. 그 점에 관해서는 다른 속성도 실패해야하기 때문입니다.

다른 점은 NUnit 응용 프로그램을 사용하여 테스트를 실행하고 있다는 것입니다. 테스트는 Visual Studio 2012에서 Windows 스토어 응용 프로그램으로 실행되지 않기 때문에 (이는 다른 질문입니다). 이것이 행동에도 영향을 줄 수 있는지 나는 모른다.

내가 묻는 질문은 다음과 같습니다. 예외를 던지 지 않고 유형 DateTimeOffset의 속성을 가진 인터페이스를 조롱하는 방법이 있습니까?

+0

승리 스토어 프로젝트에서, 내가 테스트 할 내 모든 코드를 참조하는 간단한 .NET 프레임 워크의 라이브러리를 생성, 생각 조롱 한 가치. 이것은 프로젝트 사이트에 설명되어 있습니다. ""MORE주의 : 정수 버전의 반환 값을 처리하지 못하게하는 버그가 있습니다 (예 : Setup (...) ... Returns (...) Returns 이 시점에서 문자열을 사용하십시오. 이것은 분명히 긴박한 문제로 수정 될 것입니다. "* - https://github.com/mbrit/MoqRT – Patrick

답변

0

winrt doesn't allow dynamic codegen 때문에 알고있는대로 Windows Store 런타임에서 Moq을 사용할 수 없습니다.

내가 할 그냥 값 형식은 반환하지 않습니다 때문에 발생

How to use Moq and nUnit to write Unit Tests for Windows Runtime libraries

+0

아니요, Windows Store 응용 프로그램 용 Moq를 사용할 수 있습니다. https://github.com/mbrit/MoqRT에서 다운로드 할 수 있습니다. 위의 질문과는 별도로 거의 모든 작업에 사용할 수 있습니다. :-) – Patrick

+0

또한 "정규 클래스 라이브러리"를 사용하더라도 여전히 동일한 예외가 발생합니다. 그래서 이것은 내 질문에 정말로 답하지 않습니다. – Patrick

+0

알았어요. MoqRT 라이브러리를 사용하고있는 Moq 라이브러리를 사용하지 않는 정보로 질문을 업데이트하십시오. – outcoldman

관련 문제