MSTest 提供了一个[ClassInitialize]属性,可以将其放置在static方法上以提供一次性初始化。
假设我在测试类中有一个静态成员,我希望在这样的[ClassInitialize]方法中初始化它。我如何标记它不可为空?
例如,考虑以下代码:
private static Database _database;
[ClassInitialize]
public static void InitializeClass(TestContext testContext)
{
_database = new Database();
}
Run Code Online (Sandbox Code Playgroud)
使用#nullable enable,我得到一个非常容易理解的警告:CS8618 Non-nullable field '_database' must contain a non-null value when exiting constructor. Consider declaring the field as nullable.
我可以将初始化移至构造函数(但每个测试方法都会发生这种情况)。我可以使用 null-forgiving 运算符 ( !)。是否有更好的选项来标记_database不为空?
作为转向 C# 8 可为空引用类型的一部分,我遇到了以下代码(简化):
public string GetIfExists(string key)
{
dict.TryGetValue(key, out var value);
return value;
}
Run Code Online (Sandbox Code Playgroud)
该return行警告可能返回空引用,这是有道理的。所以我试图用一个[return: MaybeNull]属性来注释这个方法,但警告仍然出乎我的意料。从文档中,我了解到此属性将返回类型标记为 optional null,即使实际类型不允许。
似乎我避免警告的唯一选择是标记返回类型string?。那么有什么用[return: MaybeNull]呢?
Azure 事件中心发布了一个现代客户端库 ( Azure.Messaging.EventHubs),用于读取和写入事件中心。新库应该取代旧库(Microsoft.Azure.EventHubs),所以我想知道当前使用旧库的现有应用程序的升级路径应该是什么。
更具体地说,切换到新库是否意味着应用程序必须丢失旧版本的检查点?虽然迁移指南清楚地解释了升级的好处以及代码示例,但我找不到任何关于数据丢失的提及。