Calling teardown on the UnityContainer doesn’t remove a registration from Unity. Here’s how to unit test code that resolves a type configured by RegisterInstance rather than configuration. IoC is a thin wrapper around the UnityContainer.
private ControllerContext _controllerContext;
private ModelMetadata _modelMetadata;
private Proposer _proposer;
private ILookup _lookup;
private LifetimeManager _lifetimeManager;
[TestInitialize]
public void SetupTest()
{
_controllerContext = new ControllerContext();
_modelMetadata =
ModelMetadataProviders.Current.GetMetadataForType(() => _proposer.AcceptedTerms, typeof (bool));
_proposer = new Proposer();
_lifetimeManager = new ContainerControlledLifetimeManager();
_lookup = MockRepository.GenerateStrictMock<ILookup>();
IoC.UnityContainer.RegisterInstance(typeof(ILookup), _lookup, _lifetimeManager);
}
[TestCleanup]
public void VerifyExpectations()
{
_lifetimeManager.RemoveValue();
_lookup.VerifyAllExpectations();
}
[TestMethod]
public void ErrorMessageIsCorrectlyGenerated()
{
var target = new NotDefaultIfAttribute("test/notDefaultIf")
{
OtherProperty = "Surname"
};
_lookup.Expect(l => l.GetLabel("test/notDefaultIf")).Return("Blah blah {0} blah");
Assert.AreEqual("Blah blah AcceptedTerms blah", target.FormatErrorMessage("AcceptedTerms"));
}