【问题标题】:Unit Test WCF Service with long starting time启动时间长的单元测试 WCF 服务
【发布时间】:2018-03-18 18:12:31
【问题描述】:

我们有一个启动时间为几分钟的 WCF 服务,因为大量数据必须加载到内存中。

我们的问题是,如何在不重新启动服务的情况下测试所有方法?

详细说明:

  • 我们从另一个 WCF-service 测试服务契约的方法,这样我们只需要启动我们的 WCF-service 一次。即,我们启动我们的服务和测试服务,后者调用我们的服务来运行相关的单元测试。

  • 对于不需要内存中数据的方法,我们只是在服务内部实现了单元测试。

  • 我们的问题与所有需要内存中数据且不属于数据契约的方法有关。我们如何为这些方法实现单元测试,以便我们可以运行多个测试并且服务必须只启动一次?实际上,我们在服务内部实现了这些单元测试,但如果我们运行测试,服务必须在测试完成后立即启动和关闭。

请注意,不能将相关方法移动到库中或将它们添加到服务合同中。

【问题讨论】:

    标签: c# .net unit-testing wcf


    【解决方案1】:

    如果我理解正确,您遇到的主要问题是处理 WCF 服务的状态,因为它在启动时需要它。

    首先,很高兴看到您为所有不依赖服务状态的测试用例实现了单独的单元测试

    在测试 有状态方法 时,您将需要 集成测试(但由于术语,我不想做头发分裂?) .为此,您只需在设置方法中初始化您的服务一次,然后再执行任何测试(随后可能相互依赖)。

    您使用的是哪个测试框架? NUnit、MSTest 还是其他? 假设您使用的是 NUnit,您将使用 [OneTimeSetUp]-attribute 来初始化您的 WCF 服务,并将该实例用于需要初始化服务(以及状态,分别是数据)的每个测试:

    namespace Foo
    {
      [TestFixture]
      public class YourServiceTests
      {
        private IYourService _service;
    
        [OneTimeSetUp]
        public void Init()
        { 
          /* Do whatever is necessary to initialize the service */ 
          _service = CreateNewInstance();
        }
    
        [OneTimeTearDown]
        public void Cleanup()
        { 
          /* optionally provide a teardown method to gracefully shutdown the service */ 
        }
    
        [Test]
        public void TestA()
        { 
          var expected = "bar";
          var actual = _service.MethodA();
          Assert.That(actual, Is.EqualTo(expected));
        }
    
        [Test]
        public void TestB()
        { 
          // ...
        }
      }
    }
    

    --

    关于您的其他问题(“我们的问题涉及所有需要内存中数据且不属于数据合同的方法。”),我会使用类似的方法: p>

    由于您要测试不属于IYourService-contract 的方法,因此您基本上可以执行与上述相同的操作([OneTimeSetUp]),但现在您将初始化IYourService 的具体实现(例如YourService)。然后,您将能够访问和测试无法通过接口/合约访问的所有其他公共方法。

    【讨论】:

    • 非常感谢,[OneTimeSetUp]-属性正是我搜索的。但是,“您将能够访问和测试所有其他无法通过接口/合同访问的公共方法”是什么意思?这仅适用于公共方法吗?我们如何测试私有和内部方法?
    • 很高兴来到这里 :-) 通常你不会直接测试私有方法。当从公共方法调用它们时,它们将被间接测试。对于内部方法,您可以使用InternalsVisibleTo-attribute
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2010-09-07
    相关资源
    最近更新 更多