如何设置服务定位器来测试MVVM中的视图模型

时间:2014-10-22 20:10:32

标签: c# wpf unit-testing mvvm mvvm-light

我试图为我的视图模型编写一些单元测试,并且我遇到了以下问题。 问题的一部分是我可能错误地使用了服务定位器,但现在就这样了。

这是我的代码(使用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实例之前在测试项目中注册它?

1 个答案:

答案 0 :(得分:3)

怎么样

  [SetUp]
  public void RunBeforeAllFixtures()
        {
            ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
            _vm = new TestViewModel();

        }

还嘲笑和注册IRepository'Test'