我试图为我的视图模型编写一些单元测试,并且我遇到了以下问题。 问题的一部分是我可能错误地使用了服务定位器,但现在就这样了。
这是我的代码(使用MVVM Light IOC注册我的存储库):
public class TestViewModel : ViewModelBase
{
private RelayCommand ...;
private RelayCommand ...;
private ObservableCollection<Test> _list;
private IRepository<Test> _testRepository;
public TestViewModel()
{
//Get the repository
_tenderRepository = ServiceLocator.Current.GetInstance<IRepository<Test>>();
//do a get on the repository and load it onto a list
LoadTestData()
}
...
}
我想为这个视图模型进行单元测试,有几个公共属性和公共方法......所以我这样设置:
[TestFixture]
public class VMTests
{
TestViewModel _vm;
[SetUp]
public void RunBeforeAllFixtures()
{
_vm = new TestViewModel();
}
[Test()]
public void PublicMethod()
{
...
}
}
我从测试引擎收到错误,指出&#34; 必须设置ServiceLocationProvider &#34;当我试图运行测试。这是否意味着我必须模拟(或创建测试提供程序),在创建在测试项目中选择vm实例之前在测试项目中注册它?
答案 0 :(得分:3)
怎么样
[SetUp]
public void RunBeforeAllFixtures()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
_vm = new TestViewModel();
}
还嘲笑和注册IRepository'Test'