首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TestFixtureSetUpAttribute在JustMock中没有发现?

TestFixtureSetUpAttribute在JustMock中没有发现?
EN

Stack Overflow用户
提问于 2017-08-29 06:27:13
回答 2查看 995关注 0票数 4

我正在用C#、.NET Framework4.7、Nunit 3.8.0和JustMock Lite 2017.2.821.1开发一个TDD测试。

当我这么做时:

代码语言:javascript
复制
IGenericRepository<ProductionOrder> _proOrdRepository = 
                Mock.Create<IGenericRepository<ProductionOrder>>();

我得到以下例外:

代码语言:javascript
复制
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.

这是我第一次用TDD和JustMock做一些事情,我不知道如何解决这个问题。

我的考试课是:

代码语言:javascript
复制
[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 " ";
    }
}

有什么想法吗?

更新

我删除了方法SetUpLoadFinishedTrzlBatch,并将所有内容移到ShouldExistsProductionOrder方法中,并得到了相同的错误。

代码语言:javascript
复制
[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);
}

我认为问题出在JustMock。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-29 13:13:18

JustMock 依赖于TestFixtureSetUpAttribute和TestFixtureTearDownAttribute for NUnit 3和NUnit 2。

这两个属性在NUnit 3.0中被废弃,在NUnit 3.8中刚刚被删除。JustMock应该更新以使用它们的替代品,OneTimeSetUpOneTimeTearDown

作为一个用户,在解决这个问题之前,您不能在NUnit 3.7.1之后使用。您可以向JustMock 这里报告此问题。

自从JustMock 2018年R1发布以来,这个问题就得到了解决。

票数 8
EN

Stack Overflow用户

发布于 2017-11-03 16:52:42

为了进一步更新,JustMock (Version-2017.3.913.1)现在支持3.7.1版本的NUnit,但3.8.x版本仍然存在。

如果您有降低NUnit版本的灵活性,可以执行以下操作。

1:在VS中,转到- Tools> NuGet包管理器>控制台。

2: PM> Install -Version 较低版本,您可以降级您的NUnit版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45932110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档