Hello,
Do you have advice on testing endpointconfiguration? I now use (hidden) magic strings to test it.
We use sqlserver transport.
Some parts are important in the behavior f.ex. transactionscopemode, audit etc.
I would like ensure that with tests.
See my example.
(Side note, because endpointconfiguration takes up quite some lines, we use builders for setting it up, therefor in the arrange is custom code from us)
[TestClass]
public class TestEndpointConfiguration
{
[TestMethod]
public void TestSendOnlyConfiguration()
{
// ARRANGE
var endpointConfigurationBuilder = new SqlEndpointConfigurationBuilder(endpointName: "MyQueueName", connectionStringOrName: "MyDbName", schemaName: SqlEndpointConfigurationBuilder.SqlSchemaNameDefault);
endpointConfigurationBuilder.WithAutofacContainer(MyDIContainer);
endpointConfigurationBuilder.AsSendOnly();
// ACT
var endpointConfiguration = endpointConfigurationBuilder.Build();
// ASSERT
var configuredSettings = endpointConfiguration.GetSettings();
Assert.AreEqual("MyQueueName" configuredSettings.Get("NServiceBus.Routing.EndpointName"));
Assert.AreEqual(true, configuredSettings.Get("Endpoint.SendOnly"));
Assert.AreEqual(SqlEndpointConfigurationBuilder.SqlSchemaNameDefault, configuredSettings.Get("SqlServer.SchemaName"));
}
[TestMethod]
public void TestReceiveConfiguration()
{
// ARRANGE
var endpointConfigurationBuilder = new SqlEndpointConfigurationBuilder("MyQueueName", "MyDbName", SqlEndpointConfigurationBuilder.SqlSchemaNameDefault);
endpointConfigurationBuilder.WithDefaultAuditQueue();
endpointConfigurationBuilder.WithAutofacContainer(MyDIContainer);
if (OnError != null) endpointConfigurationBuilder.WithCustomRecoverability(settings => settings.Failed(x => x.OnMessageSentToErrorQueue(OnError)), preserveDefaults: true);
if (OnCriticalError != null) endpointConfigurationBuilder.WithCriticalErrorAction(OnCriticalError);
endpointConfigurationBuilder.WithDiagnosticsPath("SomePath");
// ACT
var endpointConfiguration = endpointConfigurationBuilder.Build();
// ASSERT
var configuredSettings = endpointConfiguration.GetSettings();
Assert.AreEqual(Queues.Node, configuredSettings.Get("NServiceBus.Routing.EndpointName"));
Assert.AreEqual(false, configuredSettings.Get("Endpoint.SendOnly"));
Assert.AreEqual(SqlEndpointConfigurationBuilder.SqlSchemaNameDefault, configuredSettings.Get("SqlServer.SchemaName"));
Assert.AreEqual("MyQueueName.Error", configuredSettings.Get("errorQueue"));
string auditAddress;
NServiceBus.AuditConfigReader.TryGetAuditQueueAddress(configuredSettings, out auditAddress);
Assert.AreEqual("Audit", auditAddress);
Assert.AreEqual(TransportTransactionMode.TransactionScope, configuredSettings.Get("NServiceBus.TransportTransactionMode"));
}
Func<FailedMessage, Task> OnError;
Func<ICriticalErrorContext, Task> OnCriticalError;
}