I'm developing a TDD test with C#, .NET Framework 4.7, Nunit 3.8.0 and JustMock Lite 2017.2.821.1.
When I do this:
IGenericRepository<ProductionOrder> _proOrdRepository = Mock.Create<IGenericRepository<ProductionOrder>>();
I get the following exception:
System.TypeInitializationException occurred HResult=0x80131534 Message=An exception occurred in the type initializer of 'Telerik.JustMock.Core.Context.MockingContext'. Source=Telerik.JustMock StackTrace: at Telerik.JustMock.Core.Context.MockingContext.get_CurrentRepository() at Telerik.JustMock.Mock.<>c__44`1.<Create>b__44_0() at Telerik.JustMock.Core.ProfilerInterceptor.GuardInternal[T](Func`1 guardedAction) at Telerik.JustMock.Mock.Create[T]() at MyProjects.Tests.LoadFinishedTrzlBatchTest.SetUpLoadFinishedTrzlBatch() in D:\MyProjects\MyProject\LoadFinishedTrzlBatchTest.cs:line 25 Inner Exception 1: InvalidOperationException: Some attribute type among NUnit.Framework.TestFixtureSetUpAttribute, nunit.framework,NUnit.Framework.TestFixtureTearDownAttribute, nunit.framework not found.
This is the first time I do something with TDD and JustMock
and I don't know how to fix this problem.
My test class is:
[TestFixture] class LoadFinishedTrzlBatchTest { private LoadFinishedTrzlBatch sut; private IGenericRepository<ProductionOrder> _proOrdRepository; [SetUp] public void SetUpLoadFinishedTrzlBatch() { _proOrdRepository = Mock.Create<IGenericRepository<ProductionOrder>>(); var batchRepository = Mock.Create<IGenericRepository<Batch>>(); var codeRepository = Mock.Create<IGenericRepository<Code>>(); var aggRepository = Mock.Create<IGenericRepository<Aggregation>>(); var aggChildrenRepository = Mock.Create<IGenericRepository<AggregationChildren>>(); sut = new LoadFinishedTrzlBatch( _proOrdRepository, batchRepository, codeRepository, aggRepository, aggChildrenRepository); } [TestCaseSource(nameof(ShouldThrowArgumentSource))] public void ShouldThrowArgumentExceptionWithInvalidProductionOrderName(string productionOrderName) { // Assert Assert.That(() => sut.ExistsProductionOrder(productionOrderName), Throws.TypeOf<ArgumentNullException>()); } [Test] public void ShouldExistsProductionOrder() { // Arrange var productionOrderName = "ProOrd"; var orders = new List<ProductionOrder>() { new ProductionOrder { Name = productionOrderName }, new ProductionOrder { Name = "Dummy for Filter" } }; Mock.Arrange(() => _proOrdRepository .SearchFor(Arg.IsAny<Expression<Func<ProductionOrder, bool>>>())) .Returns((Expression<Func<ProductionOrder, bool>> expression) => orders.Where(expression.Compile()).AsQueryable()) .MustBeCalled(); // Act var actual = sut.ExistsProductionOrder(productionOrderName); // Assert Assert.IsTrue(actual); } private static IEnumerable ShouldThrowArgumentSource() { yield return string.Empty; yield return null; yield return " "; } }
Any idea?
UPDATE:
I have deleted the method SetUpLoadFinishedTrzlBatch
and move everything inside the method ShouldExistsProductionOrder
and I get the same error.
[Test] public void ShouldExistsProductionOrder() { LoadFinishedTrzlBatch sut; IGenericRepository<ProductionOrder> _proOrdRepository; _proOrdRepository = Mock.Create<IGenericRepository<ProductionOrder>>(); var batchRepository = Mock.Create<IGenericRepository<Batch>>(); var codeRepository = Mock.Create<IGenericRepository<Code>>(); var aggRepository = Mock.Create<IGenericRepository<Aggregation>>(); var aggChildrenRepository = Mock.Create<IGenericRepository<AggregationChildren>>(); sut = new LoadFinishedTrzlBatch( _proOrdRepository, batchRepository, codeRepository, aggRepository, aggChildrenRepository); // Arrange var productionOrderName = "ProOrd"; var orders = new List<ProductionOrder>() { new ProductionOrder { Name = productionOrderName }, new ProductionOrder { Name = "Dummy for Filter" } }; Mock.Arrange(() => _proOrdRepository .SearchFor(Arg.IsAny<Expression<Func<ProductionOrder, bool>>>())) .Returns((Expression<Func<ProductionOrder, bool>> expression) => orders.Where(expression.Compile()).AsQueryable()) .MustBeCalled(); // Act var actual = sut.ExistsProductionOrder(productionOrderName); // Assert Assert.IsTrue(actual); }
I think the problem is in JustMock.