我正在尝试在Xamarin.iOS项目中对一些代码进行单元测试,但是我遇到了一个无法解决的编译器错误。任何人都有关于如何解决错误的建议?
在单个解决方案中,我有一个Xamarin.iOS项目用于我的应用程序的非UI部分和另一个Xamarin.iOS单元测试项目。我正在测试Parse作为后端,但是想要从我的大多数应用程序中隐藏它,所以我添加了一个扩展方法,将我的User模型转换为ParseUser对象。当我尝试在单元测试项目中使用扩展方法时,我得到以下错误:
/Matchup/MatchupXplatformTests/ParseHelperTests.cs(27,27): 错误CS1061:键入
MatchupXplatform.Models.User' does not contain a definition for
ToParseUser'并且找不到扩展方法ToParseUser' of type
MatchupXplatform.Models.User'。你错过了吗? 装配参考? (CS1061)(MatchupXplatformTests)
以下是我正在尝试运行的代码:
[Test]
public void Pass ()
{
var user = new User () {
Username = "me@you.com",
Email = "me@you.com",
Password = "meyoucom",
Name = "Me You"
};
ParseUser pUser = user.ToParseUser (); // <- Error here
Assert.Equals (user.Username, pUser.Username);
}
令人困惑的部分是,在上面的代码段中,Xamarin Studio中的代码完成解析了.ToParseUser()扩展方法,提供了有关该方法的准确信息,并且可以找到该方法的声明,但编译器仍会生成错误。
我确保单元测试项目引用了另一个项目,单元测试文件具有用户模型的使用语句和扩展方法类。我还验证了下面的代码在后端项目中工作,但在单元测试项目中没有。
Xamarin Studio:版本4.1.3(版本66) Xamarin.iOS:版本:6.3.6.76(试用版)
更新:根据要求,附加代码:
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 = "me@you.com",
Email = "me@you.com",
Password = "meyoucom",
Name = "Me You"
};
ParseUser pUser = user.ToParseUser (); // <- Error here
Assert.Equals (user.Username, pUser.Username);
}
}
}
经过几个小时的努力,我最终只是将这个功能封装在一个服务方法中,然后从单元测试中调用该方法。这很好,但我很好奇为什么会产生错误。
答案 0 :(得分:1)
看起来你的扩展方法是你的MatchupXplatform程序集的内部方法,并且对你的单元测试不可见。