东北大学全栈开发课程笔记5

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

一些异常:

  1. 空指针异常:dbAssertStream=null?

    因为.net自动在资源名前面加上了项目名(MasterDetailTemplate.poetrydb.sqlite3),因此找不到数据库文件。

    需要将编辑项目文件中EmbeddedResource改为如下代码:

    <ItemGroup>
        <EmbeddedResource Include="poetrydb.sqlite3"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值