2013-06-18 8 views
1

원래 VS2010에서 시작한 솔루션의 일부인 어셈블리에 대해 약 300 단위 테스트가 있습니다. 수많은 테스트에서 Micrsoft가 제공 한 Moles 프레임 워크를 사용했지만 VS2012 (업데이트 2)로 업그레이드 한 후 공식적으로 제공된 Fakes 프레임 워크를 사용하도록 테스트를 변경하려고했습니다.Moles에서 Fake로 전환 한 후 VS2012에서 임의의 단위 테스트가 실패합니다.

보통 코드에 ShimsContext과 약간의 변화를 만들어 참여 내가 따라 해당 테스트를 업데이트

:

[TestMethod] 
[HostType("Moles")] 
public void MyUnitTest_CalledWithXyz_ThrowsException() 
{ 
    // Arrange 
    ... 
    MGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString = 
     (t1, t2, t3) => null; 
    ... 

    try 
    { 
     // Act 
     ... 
    } 
    catch(Exception ex) 
    { 
     // Assert 
     ... 
    }  
} 

[TestMethod] 
public void MyUnitTest_CalledWithXyz_ThrowsException() 
{ 
    using(ShimsContext.Create()) 
    { 
     // Arrange 
     ... 
     ShimGroupPrincipal.FindByIdentityPrincipalContextIdentityTypeString = 
      (t1, t2, t3) => null; 

     try 
     { 
      // Act 
      ... 
     } 
     catch(Exception ex) 
     { 
      // Assert 
      ... 
     }  
    } 
} 

하기 전에 내 테스트 수업이 다르다. > 21 개 테스트는 같은 클래스/15 패스

  • 실행 테스트를 실패 = 릴리스 모드에서 하나 개의 클래스에 대한

    • 실행 테스트 : 나는 테스트를 실행할 때 EST 프로젝트는, 나는 임의의 예를 들어 내가 설명 할 수 없다하는 오류를 얻을 디버그 모드에서 => 2 테스트 실패/34 패스
    • 릴리스 모드 => 2 테스트 실패/34 패스에서
    • 테스트를 모두 실행합니다. 테스트 실패/15 회 통과 (for 상기 언급 된 클래스)

    같은 자신의 시스템에있는 동료의 행동. System.TypeLoadException : 오류 메시지가 항상 TypeLoadException의 같은

    등의 시험 방법은 ... 예외 던졌다 유형 'System.DirectoryServices.Fakes.ShimDirectorySearcher'어셈블리 '을로드 할 수 없습니다를 System.DirectoryServices.4.0.0.0 .Fakes, 버전 = 4.0.0.0, 문화 = 중립, PublicKeyToken = ... " 오류를 표시하지 않습니다 소스 코드 에디터, 인텔리이 예상 작품으로 VS2012 자체에서

    , 예를 들어 ShimDirectorySearcher 쇼 곳을 마우스 툴팁 또한 .NET Reflector로 생성 된 Fake 어셈블리 (예 : System.DirectoryServices.4.0.0.0.Fakes.dll)를 열면 오류 메시지에 표시된 유형이 존재합니다.

    우리가 VS2010에서 VS2012로 전환하기 전에 모든 테스트가 잘 작동했습니다 (디버그 및 릴리스 모드에서도). 그러나 여기서 우리는 무엇이 잘못되었는지 실마리가 없습니다. 위에서 설명한 방법으로 결과가 변경되는 이유는 무엇입니까? 유형이 존재하더라도 왜 우리는 TypeLoadExceptions를 얻습니까?

    불행히도 Micrsoft 또는 인터넷에서 사용할 수있는 도움말은 거의 없습니다.

  • +0

    몰 조립품/공작물을 완전히 없앴습니까? 또한 기존 어셈블리가있는 디렉토리를 모두 지우고 깨끗한 상태로 시작하십시오. 그것은 재미있다. – Spock

    +0

    여기 또는 http://connect.microsoft.com/visualstudio에서 작은 repro를 게시하십시오. –

    +0

    @Raj - 이전에 Moles와 가끔 문제가 있었으므로 그렇게했습니다. 나는'.testsettings' 파일을 삭제하고 대신'.runsettings' 파일을 사용하여 해결책을 찾았을 것이라고 생각합니다. 지금 당장은 아니지만 더 자세히 조사하고 업데이트 해 드리겠습니다. @Oleg Sych - 문제를 시연하기위한 작은 새로운 솔루션으로 문제를 재현 할 수 있습니다. – Gorgsenegger

    답변

    0

    왜 VS2010에서 나온 이전 .testsettings 파일이 그런 문제인지 이해할 수 없지만 파일을 삭제하고 MSDN에 의해 제안 된대로 .runsettings 파일을 추가하는 것이 저에게 도움이되었습니다.

    모든 문제가 해결되었다 : 문제없이 문제없이 (다시) 실행 테스트

  • 임의의 조합을

    • 모든 단위 테스트를 (다시) 실행
    • 나는 페이크를 사용하여 테스트를 디버깅 할 수 있습니다 (내가 사용하기 전에 테스트 도구화 오류를 얻으려는 경우)

    희망 사항은 문제가있는 다른 사람들에게 도움이되기를 바랍니다. 아직 가짜에 대한 정보가 너무 많지는 않습니다.

    Code Coverage과 관련하여 한 가지 더 : 이것은 테스트 => 분석 코드 커버리지를 통해 (테스트 설정을 구성 할 필요없이) 작동합니다. TFS 빌드 정의의 경우 Process => Basic => Automated Tests => 1. Test Source를 선택하여 빌드에 대한 코드 적용 범위를 활성화 할 수 있습니다. 이제 해당 텍스트 필드를 클릭 한 다음 텍스트 필드를 클릭 할 때 표시되는 ... 버튼을 클릭하십시오. 이제 Test runner ComboBox에서 Visual Studio Test Runner을 선택하십시오. 이제 옵션에서 Enable Code Coverage을 선택할 수도 있습니다.