2013-06-10 2 views
0

Xamarin.iOS 프로젝트에서 단위 테스트를하려고하는데 해결할 수없는 컴파일러 오류가 발생합니다. 누구든지 오류를 해결하는 방법에 대한 조언을 가지고 있습니까?Xamarin 컴파일러가 확장 메서드를 사용하지 않습니다.

하나의 솔루션으로, 내 앱의 비 UI 부분과 Xamarin.iOS 단위 테스트 프로젝트를위한 Xamarin.iOS 프로젝트가 있습니다. Parse를 백엔드로 테스트하고 있지만, 내 사용자 모델을 ParseUser 객체로 변환하는 확장 메서드를 추가하여 대부분의 응용 프로그램에서 숨길 수 있습니다. 유형 MatchupXplatform.Models.User' does not contain a definition for ToParseUser '없이 : 오류 CS1061을 :

/Matchup/MatchupXplatformTests/ParseHelperTests.cs(27,27) : 내 단위 테스트 프로젝트의 확장 메서드를 사용하려고하면, 다음과 같은 errror를 얻을 수 확장 방법 ToParseUser' of type MatchupXplatform.Models.User '을 (를) 찾을 수 없습니다. 어셈블리 참조가 누락 되었습니까?

[Test] 
public void Pass() 
{ 
    var user = new User() { 
     Username = "[email protected]", 
     Email = "[email protected]", 
     Password = "meyoucom", 
     Name = "Me You" 
    }; 

    ParseUser pUser = user.ToParseUser(); // <- Error here 

    Assert.Equals (user.Username, pUser.Username); 
} 

혼란스러운 부분 (자 마린 스튜디오에서 코드 완성을 위의 코드 조각에 .ToParseUser를 해결한다는 것입니다 : (CS1061) (MatchupXplatformTests는) 다음

내가 실행하는 데 노력하고있어 코드) 확장 메서드를 사용하여 메서드에 대한 정확한 정보를 제공하고 메서드의 선언을 찾을 수는 있지만 컴파일러는 여전히 오류를 생성합니다.

단위 테스트 프로젝트가 다른 프로젝트를 참조하고 단위 테스트 파일이 사용자 모델 및 확장 메서드 클래스에 대한 문을 사용하도록했습니다. 또한 아래 코드가 백엔드 프로젝트에서는 작동하지만 유닛 테스트 프로젝트에서는 작동하지 않음을 확인했습니다.

자 마린 스튜디오 : 버전 4.1.3 (66 빌드) Xamarin.iOS : 버전 : 6.3.6.76 (평가판)


UPDATE : 요청으로 추가 코드 :

MatchupXplatform/모델/User.cs :

using System; 
using System.Runtime.Serialization; 

namespace MatchupXplatform.Models 
{ 
    public class User 
    { 
     [DataMember(Name = "username")] 
     public string Username { get; set; } 

     [DataMember(Name = "email")] 
     public string Email { get; set; } 

     [DataMember(Name = "password")] 
     public string Password { get; set; } 

     [DataMember(Name = "name")] 
     public string Name { get; set; } 
    } 
} 

MatchupXplatform/ParseHelper.cs :

using System; 
using System.Runtime.Serialization; 
using System.Reflection; 
using System.Collections.Generic; 
using Parse; 
using MatchupXplatform.Models; 

namespace MatchupXplatform 
{ 
    internal static class ParseHelper 
    { 
     public static ParseUser ToParseUser (this User user) 
     { 
      var pUser = new ParseUser(); 

      try { 
       var pObj = (ParseObject)pUser; 
       user.UpdateParseObject (ref pObj); 
       return pUser; 

      } catch (ParseException pe) { 
       Console.WriteLine (pe); 
       return null; 
      } 

     } 

     public static User ToUser (this ParseUser pUser) 
     { 
      return pUser.ToParseObject<User>(); 
     } 
    } 
... 
} 

MatchupXplatformTests 참조 : Parse.iOS.dll MatchupXplatform monotouch MonoTouch.NUnitLite 시스템 System.Core 에서 System.Xml

MatchupXplatformTests/ParseHelperTests.cs :

using System; 
using NUnit.Framework; 
using MatchupXplatform; 
using MatchupXplatform.Models; 
using Parse; 

namespace MatchupXplatformTests 
{ 
    [TestFixture] 
    public class ParseHelperTests 
    { 
     [TestFixtureSetUp] 
     public void Setup() 
     { 
      ParseStarter.Initialize(); 
     } 

     [Test] 
     public void Pass() 
     { 
      var user = new User() { 
       Username = "[email protected]", 
       Email = "[email protected]", 
       Password = "meyoucom", 
       Name = "Me You" 
      }; 

      ParseUser pUser = user.ToParseUser(); // <- Error here 

      Assert.Equals (user.Username, pUser.Username); 
     } 
    } 
} 

어려움을 겪고 후 몇 시간 동안이 기능을 서비스 메소드에 캡슐화하고 그 메소드를 단위 테스트. 그게 잘 작동하지만 왜 이것이 오류를 생성 궁금하네요.

+0

확장 메소드 코드와 헤더 (네임 스페이스)를 제공해 주시겠습니까? 클래스에 확장 메서드가 정의되어있을 가능성이 있으며,이 네임 스페이스는 테스트 코드 파일에 포함되어 있지 않을 수 있습니다. –

+0

당신은 확장이 적절한'using'으로 정의 된 네임 스페이스를 참조하고 있습니까? –

+0

안녕하세요 Maxim, 위 코드를 추가했습니다. 스테판, 네, 네임 스페이스를 참조하고 있습니다. –

답변

1

귀하의 확장 방법이 MatchupXplatform 어셈블리의 내부에있는 것으로 보이며 단위 테스트에서 보이지 않습니다.

+0

그건 저주받은 사람이야, 지적 해 주셔서 고마워. 방법을 보여주는 코드 완성에 혼란 스러웠고 심지어 내부에 주목하지도 않았습니다. –

관련 문제