验证 NServiceBus 事件属性(使用接口)
Validating NServiceBus Event Properties (Using Interfaces)
我无法验证使用 NServiceBus.Testing 发布的事件(NServiceBus,V6 beta)
在我的 api 控制器中,我发布了一个事件
await _messageSession.Publish<IStrategyCreated>(stgy =>
{
stgy.StrategyId = strategyToAdd.Id;
stgy.InvestmentObjective = strategyToAdd.InvestmentObjective;
stgy.PrincipalInvestmentStrategy = strategyToAdd.PrincipalInvestmentStrategy;
stgy.PortfolioConsultant = strategyToAdd.PortfolioConsultant;
stgy.StrategyName = strategyToAdd.Name;
stgy.StrategyCode = strategyToAdd.Code;
});
在我的测试中我有:
Assert.That(messageSession.PublishedMessages.Length, Is.EqualTo(1), "Messages published");
Assert.IsInstanceOf<IStrategyCreated>(messageSession.PublishedMessages[0],"Message published was of type IStrategyCreated");
第二行失败,因为消息类型是IStrategyCreated_impl
错误:
Message published was of type IStrategyCreated
Expected: instance of <Strategy.Contracts.Events.IStrategyCreated>
But was: <NServiceBus.Testing.PublishedMessage`1[System.Object]>
完整测试方法:
public async Task TestCreateStrategy ()
{
var messageSession = new TestableMessageSession();
var dbContent = _container.Resolve<IStrategyDbContext>();
var apiContext = new StrategyController(messageSession, dbContent);
var result =
await apiContext.Create(new StrategyModel {Code = "NEW"}) as
OkNegotiatedContentResult<StrategyModel>;
Assert.That(messageSession.PublishedMessages.Length, Is.EqualTo(1), "Messages published");
Assert.IsInstanceOf<IStrategyCreated>(messageSession.PublishedMessages[0],"Message published was of type IStrategyCreated");
var stgyCreated =(IStrategyCreated) messageSession.PublishedMessages[0];
Assert.That(result, Is.Not.Null, "Result Is Null");
Assert.That(stgyCreated.StrategyCode, Is.EqualTo("NEW"));
Assert.That(result?.Content.Code, Is.EqualTo("NEW"), "Returning Strategy");
Assert.That(dbContent.Strategies.Count(), Is.EqualTo(1), "Exactly 1 item was added to strategy list");
}
而不是 messageSession.PublishedMessages[0]
使用 messageSession.PublishedMessages[0].Message
,应该可以。
我无法验证使用 NServiceBus.Testing 发布的事件(NServiceBus,V6 beta)
在我的 api 控制器中,我发布了一个事件
await _messageSession.Publish<IStrategyCreated>(stgy =>
{
stgy.StrategyId = strategyToAdd.Id;
stgy.InvestmentObjective = strategyToAdd.InvestmentObjective;
stgy.PrincipalInvestmentStrategy = strategyToAdd.PrincipalInvestmentStrategy;
stgy.PortfolioConsultant = strategyToAdd.PortfolioConsultant;
stgy.StrategyName = strategyToAdd.Name;
stgy.StrategyCode = strategyToAdd.Code;
});
在我的测试中我有:
Assert.That(messageSession.PublishedMessages.Length, Is.EqualTo(1), "Messages published");
Assert.IsInstanceOf<IStrategyCreated>(messageSession.PublishedMessages[0],"Message published was of type IStrategyCreated");
第二行失败,因为消息类型是IStrategyCreated_impl
错误:
Message published was of type IStrategyCreated
Expected: instance of <Strategy.Contracts.Events.IStrategyCreated>
But was: <NServiceBus.Testing.PublishedMessage`1[System.Object]>
完整测试方法:
public async Task TestCreateStrategy ()
{
var messageSession = new TestableMessageSession();
var dbContent = _container.Resolve<IStrategyDbContext>();
var apiContext = new StrategyController(messageSession, dbContent);
var result =
await apiContext.Create(new StrategyModel {Code = "NEW"}) as
OkNegotiatedContentResult<StrategyModel>;
Assert.That(messageSession.PublishedMessages.Length, Is.EqualTo(1), "Messages published");
Assert.IsInstanceOf<IStrategyCreated>(messageSession.PublishedMessages[0],"Message published was of type IStrategyCreated");
var stgyCreated =(IStrategyCreated) messageSession.PublishedMessages[0];
Assert.That(result, Is.Not.Null, "Result Is Null");
Assert.That(stgyCreated.StrategyCode, Is.EqualTo("NEW"));
Assert.That(result?.Content.Code, Is.EqualTo("NEW"), "Returning Strategy");
Assert.That(dbContent.Strategies.Count(), Is.EqualTo(1), "Exactly 1 item was added to strategy list");
}
而不是 messageSession.PublishedMessages[0]
使用 messageSession.PublishedMessages[0].Message
,应该可以。