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);
}
}
}
어려움을 겪고 후 몇 시간 동안이 기능을 서비스 메소드에 캡슐화하고 그 메소드를 단위 테스트. 그게 잘 작동하지만 왜 이것이 오류를 생성 궁금하네요.
확장 메소드 코드와 헤더 (네임 스페이스)를 제공해 주시겠습니까? 클래스에 확장 메서드가 정의되어있을 가능성이 있으며,이 네임 스페이스는 테스트 코드 파일에 포함되어 있지 않을 수 있습니다. –
당신은 확장이 적절한'using'으로 정의 된 네임 스페이스를 참조하고 있습니까? –
안녕하세요 Maxim, 위 코드를 추가했습니다. 스테판, 네, 네임 스페이스를 참조하고 있습니다. –