TestFixtureSetUpAttribute not found in JustMock?

3

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.

c#
nunit
justmock
asked on Stack Overflow Aug 29, 2017 by VansFannel • edited Aug 29, 2017 by Nkosi

2 Answers

7

JustMock relies on TestFixtureSetUpAttribute and TestFixtureTearDownAttribute for both NUnit 3 and NUnit 2.

These two attributes were deprecated in NUnit 3.0, and have just been removed in NUnit 3.8. JustMock should update to use their replacements, OneTimeSetUp and OneTimeTearDown.

As a user - you can't use later than NUnit 3.7.1 until this is resolved. You can report the issue to JustMock here.

The problem is fixed since JustMock 2018 R1 release.

answered on Stack Overflow Aug 29, 2017 by Chris • edited Jan 23, 2019 by Mihail Vladov
0

To update further, JustMock (Version-2017.3.913.1) is now supporting NUnit for 3.7.1 version but it still exists for 3.8.x.

In case you have the flexibility to downgrade the version of NUnit, the following can be done.

1: In VS, go to - Tools> NuGet Package Manager > Package Manager Console.

2: PM> Install-Package NUnit -Version [lower version] (Just press tab after -Version to get all supported versions) and you can downgrade your NUnit version.

answered on Stack Overflow Nov 3, 2017 by daya-shankar07

User contributions licensed under CC BY-SA 3.0