This package contains an abstraction of the static System.AppDomain class found in .NET Framework 4.8 and above. It allows for an IAppDominFactory interface to be used instead of the static class and for mocks to be created.
- Pass
IAppDomainFactoryas a dependency via the constructor into the class utilizeIAppDomain:
public class TestableClass
{
private readonly IAppDomainFactory _appDomainFactory;
public TestableClass(IAppDomainFactory appDomainFactory)
{
_appDomainFactory = appDomainFactory;
}
public string GetBaseDirectory()
{
IAppDomain appDomain = _appDomainFactory.CurrentDomain;
return _appDomain.BaseDirectory;
}
}- In your IOC Container register
IAppDomainFactoryandAgilent.Testables.AppDomainFactory:
_services.AddTransient<IAppDomainFactory, AppDomainFactory>();- In your tests, setup and use IAppDomainFactory and IAppDomain as required:
[TestMethod]
public void Should_GetBaseDirectory()
{
// Arrange
var baseDirectory = @"C:\AppBaseDirectory";
var mockAppDomain = new Mock<IAppDomain>();
mockAppDomain.Setup(x => x.BaseDirectory).Returns(baseDirectory);
var mockAppDomainFactory = new Mock<IAppDomainFactory>();
mockAppDomainFactory.Setup(x => x.CurrentDomain).Returns(mockAppDomain.Object);
var sut = new TestableClass(mockAppDomainFactory.Object);
// Act
var result = sut.GetBaseDirectory();
// Assert
result.Should().Be(baseDirectory);
}