Xamarin.Forms ListView的NUnit测试与单元格绑定

Xamarin.Forms ListView的NUnit测试与单元格绑定,listview,xamarin,view,xamarin.forms,nunit,Listview,Xamarin,View,Xamarin.forms,Nunit,我正试图用一个自定义的数据模板为列表视图编写单元测试。尽管这些单元格在iOS和Android上按预期呈现,但在运行NUnit测试时,它们的绑定属性为null 设置 要在NUnit测试项目中启动Xamarin.Forms,我使用。因此,TestFixture如下所示: 使用NUnit.Framework; 使用Xamarin.Forms; 使用Xamarin.Forms.mock; 命名空间单元测试 { [测试夹具] 公开课考试 { [设置] 公共作废设置() { MockForms.Init()

我正试图用一个自定义的
数据模板
列表视图
编写单元测试。尽管这些单元格在iOS和Android上按预期呈现,但在运行NUnit测试时,它们的绑定属性为
null

设置

要在NUnit测试项目中启动Xamarin.Forms,我使用。因此,
TestFixture
如下所示:

使用NUnit.Framework;
使用Xamarin.Forms;
使用Xamarin.Forms.mock;
命名空间单元测试
{
[测试夹具]
公开课考试
{
[设置]
公共作废设置()
{
MockForms.Init();
}
什么有效

一个运行良好的测试创建了一个新的
DataTemplate
,其中一个自定义
StringCell
绑定到字符串“foo”:

class StringCell:ViewCell
{
公共字符串单元格()
{
var label=新标签();
label.SetBinding(label.TextProperty,“.”);
视图=标签;
}
}
[测试]
public void ViewCellWithString()
{
var content=new DataTemplate(typeof(StringCell)).CreateContent();
(内容作为单元格)。BindingContext=“foo”;
Assert.That((内容作为ViewCell.View作为标签).Text,Is.EqualTo(“foo”);
}
正如预期的那样,呈现的
内容
是一个
视图单元格
,具有类型为
标签
视图
,带有
文本
“foo”

什么不起作用

但是,第二个测试失败:它创建了一个类型为
ItemCell
DataTemplate
,绑定到一个自定义对象
Item
,该对象具有一个可绑定属性
Name
“bar”

类项:BindableObject
{
public static readonly BindableProperty NameProperty=BindableProperty.Create(nameof(Name)、typeof(string)、typeof(Item)、null);
公共字符串名{
获取{return(string)GetValue(NameProperty);}
set{SetValue(NameProperty,value);}
}
}
类ItemCell:ViewCell
{
公共项单元格()
{
var label=新标签();
label.SetBinding(label.TextProperty,nameof(Item.NameProperty));
视图=标签;
}
}
[测试]
公共无效ViewCellWithItem()
{
var content=新数据模板(typeof(ItemCell)).CreateContent();
(内容作为单元格)。BindingContext=新项{Name=“bar”};
Assert.That((内容作为ViewCell.View作为Label.Text),是.EqualTo(“bar”);
}
此测试失败,因为标签的
Text
属性为
null

我的问题


我做错了什么?通过
绑定到字符串的行为不应该类似于通过
NameProperty
绑定到
项的行为吗?或者有没有更好的方法来实例化具有绑定属性的列表视图单元格的视图以进行单元测试?

我刚刚在代码中发现了一个微小但至关重要的错误:

而不是

label.SetBinding(Label.TextProperty, nameof(Item.NameProperty));
我需要写信

label.SetBinding(Label.TextProperty, nameof(Item.Name));
由于
nameof(Item.NameProperty)
生成“NameProperty”,但我需要绑定到“Name”