c# - 静态上下文设置后为空
问题描述
此 .Net Core 3.1 (NUnit 3) 测试可在 Visual Studio 2019 下运行。
但是,一旦我使用 JetBrains Rider,测试就会失败,因为静态属性 ( DataA
)null
在大多数情况下都会返回。
有一些想法出了什么问题以及如何解决这个问题?
public static class ClassA
{
public static string DataA { get; set; }
public static string DataB { get; set; }
public static void SetAppConfig(string appSettingsPfad)
{
IList<JProperty> appSettings = JsonConvert.DeserializeObject<JToken>(appSettingsPfad).Select(j => (JProperty)j).ToList();
var appKonfiguration = typeof(ClassA).GetProperties(BindingFlags.Public | BindingFlags.Static);
foreach (JProperty property in appSettings)
{
var appKonfigurationProperty = appKonfiguration.SingleOrDefault(p => p.Name.Equals(property.Name, StringComparison.OrdinalIgnoreCase));
var value = ((JValue)property.Value).Value;
if (appKonfigurationProperty != null)
appKonfigurationProperty.SetValue(null, Convert.ChangeType(value, appKonfigurationProperty.PropertyType));
}
}
}
[TestFixture]
public class DummyTest
{
[Test]
public void TestA()
{
LoadAppConfig();
// DataA returns null here
Console.WriteLine(ClassA.DataA);
new BusinessLogicClass.DoSomething();
// [...]
}
private void LoadAppConfig() {
// [...]
string appSettings = File.ReadAllText(jsonConfigFiles.Single());
ClassA.SetAppConfig(appSettings);
// here it works and a result is the proper string
Console.WriteLine(ClassA.DataA);
// [...]
}
}
public class BusinessLogicClass {
public void DoSomething() {
// DataA returns null here
Console.WriteLine(ClassA.DataA);
// [...]
}
}
(我已将此代码简化到最低限度,原始代码在空检查后会遇到异常)
解决方案
推荐阅读
- azure - 我可以使用 Azure IoT 边缘网关在叶设备和 Azure IoT 中心之间进行双向通信吗?
- node.js - 无法从 Node 中的 Model.findByID 获取数据 - Express
- c++ - 为什么在函数之外指针数据没有得到更新
- c++ - CMake为目标设置自定义配置名称
- python-3.x - 没有值的 for 循环的输出文件
- elasticsearch - Elasticsearch - 正确的反向边缘 ngram 标记器
- python-3.x - 将 Celery 与烧瓶路线一起使用
- c++ - 设置停靠和选项卡式 CDockablePane 的框架颜色
- javascript - Django/CKEditor/Javascript 问题,包括 textarea 中的文本
- ruby-on-rails - 如何在 Elasticsearch 中编写“或”查询?