【发布时间】:2021-03-27 18:12:06
【问题描述】:
此问题是对以下问题的跟进:Writing UnitTests for a Service Fabric Application Class
我的应用程序定义属于这种类型 - 对其进行了简化以解决我面临的最基本问题:
namespace SearchService
{
internal sealed class SearchServiceClass : StatelessService
{
//variables defined followed by constructor
private string jsonStr;
public SearchServiceClass(StatelessServiceContext context)
: base(context)
{
try
{
var dataPackage = Context.CodePackageActivationContext
.GetDataPackageObject("Data");
jsonStr = File.ReadAllText(dataPackage.Path + @"\data.json");
}
catch
{
//exception handling code
throw;
}
}
public bool IsDataJsonLoaded
{
get
{
return !(jsonStr == null);
}
}
}
}
测试类看起来像:
namespace SearchService.Tests
{
[TestClass]
public class SearchServiceClassTest
{
[TestMethod]
public void SearchServiceClassConstructor()
{
var searchServiceClass = new SearchServiceClass(MockStatelessServiceContextFactory.Default);
Assert.IsTrue(searchServiceClass.IsDataJsonLoaded);
}
}
}
我得到的例外是 "System.NullReferenceException: Object reference not set to an instance of an object." 这是由于“dataPackage.Path”未设置为“var dataPackage = Context.CodePackageActivationContext.GetDataPackageObject("Data");”中的有效值行。
如何使用模拟复制 CodePackageActivationContext?这里的“Data”指的是DataPackage,它是一个名为“Data”的文件夹,与SearchServiceClass的代码一起驻留。
【问题讨论】:
-
@LoekD:你能帮我解决这个问题吗?
-
您必须模拟
StatelessServiceContext并将该模拟传递给SearchServiceClass。 -
@AlexanderPetrov - 已编辑。对不起,那是一个错字。我之前已经解决了。
标签: c# .net unit-testing moq azure-service-fabric