上一章《【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)》中我们完成了一个简单的登录功能, 这一章主要演示如何对Stylet工程中的ViewModel进行单元测试.
回忆一下我们的登录逻辑,主要有以下4点:
当"用户名"或"密码"为空时, 是不允许登录的("登录"按钮处于禁用状态).
用户名或密码不正确时, 显示"用户名或密码不正确"的消息框.
用户名输入"waku", 并且密码输入"123", 登录成功窗口关闭, 回到主窗口.
点击登录窗口右上角的"X"按钮,整个应用程序退出.
那么我们就尝试编写代码来进行测试吧.
这里我们只测试ViewModel中的逻辑是否正确,对于UI测试则是另一个话题了,以后有机会再写.
创建测试工程
VS2019支持三种测试框架: MSTest, Nunit和xUnit, 功能上差不多, 你可以选择一个你喜欢的. 这里我们使用xUnit.
新建一个名为StyletBookStore.Test
的xUnit Test Project(.NET Core)工程:
然后对测试工程进行以下操作:
添加对
StyletBookStore
工程的引用, 这是我们测试的对象添加Moq包,我们使用Moq模拟一些Stylet的组件
Install-Package Moq -Version 4.13.1
添加Shouldly包,方便我们写Assert代码
Install-Package Shouldly -Version 3.0.2
在StyletBookStore.Test
工程中新建一个名为LoginViewModelTest
的类, 在其中编写测试代码.
配置Stylet的IoC容器
因为我们的
LoinViewModel
使用了依赖注入,所以在测试代码中最好也是使用IoC来创建测试对象.在LoginViewModelTest
的构造方法中增加以下代码:public LoginViewModelTest(){
// 向Stylet的IoC中注册服务
var builder = new StyletIoCBuilder();
builder.Bind().ToSelf();
_container = builder.BuildContainer();
}
Stylet的IoC容器需要使用
StyletIoCBuilder
提供的API来创建, 所以首先我们创建了StyletIoCBuilder
的实例.使用
Bind
范型方法注册服务, 这里我们将LoginView