PoetryStorage单元测试
新建一个单元测试项目(NUnit Test Project.NET Core)
测试xx函数,测试函数名就叫Testxx
Services层
- PoetryStorageTest.cs—TestInitializeAsync()
/// <summary>
/// 诗词存储测试。
/// </summary>
public class PoetryStorageTest {
/// <summary>
/// 自动删除数据库文件。
/// </summary>
[SetUp, TearDown]
public static void RemoveDatabaseFile() {
File.Delete(PoetryStorage.PoetryDbPath);
}
//SetUp:运行之前删除(防止被坑)
//TearDown:运行之后删除(防止坑别人)
/// <summary>
/// 测试初始化诗词存储。
/// </summary>
[Test]
public async Task TestInitializeAsync() {
//因为还未初始化,所以要断定PoetryDbPath不存在
Assert.IsFalse(File.Exists(PoetryStorage.PoetryDbPath));
//因为此时IPreferenceStorage还未实现,所以mock出一个接口的实例
//mock接口->得到一个mock工具(preferenceStorageMock)->得到接口实例(mockPreferenceStorage)
var preferenceStorageMock = new Mock<IPreferenceStorage>();
var mockPreferenceStorage = preferenceStorageMock.Object;
//初始化诗词存储
var poetryStorage = new PoetryStorage(mockPreferenceStorage);
await poetryStorage.InitializeAsync();
//初始化后,PoetryDbPath存在
Assert.IsTrue(File.Exists(PoetryStorage.PoetryDbPath));
//验证preferenceStorageMock的对象p曾经调用且只调用过一次Set函数,并且传递过指定的参数
preferenceStorageMock.Verify(
p => p.Set(PoetryStorage.VersionKey, PoetryStorage.Version),
Times.Once);
}
}
一些异常:
-
空指针异常:dbAssertStream=null?
因为.net自动在资源名前面加上了项目名(MasterDetailTemplate.poetrydb.sqlite3),因此找不到数据库文件。
需要将编辑项目文件中EmbeddedResource改为如下代码:
<ItemGroup> <EmbeddedResource Include="poetrydb.sqlite3"
东北大学全栈开发课程:PoetryStorage单元测试实践

本文记录了东北大学全栈开发课程中关于PoetryStorage的单元测试过程。创建NUnit Test Project.NET Core进行测试,遇到如空指针异常和资源定位问题,解决方案包括修改资源引用和处理数据库文件的删除。通过重构,实现了IPreferenceStorage接口,提高测试覆盖率,并遵循单一职责原则改进了PoetryStorageHelper类。
最低0.47元/天 解锁文章
260

被折叠的 条评论
为什么被折叠?



