【问题标题】:Is it possible in a C# testing framework to have my auto fac dependencies injected for me into my tests?在 C# 测试框架中是否可以将我的自动 fac 依赖项注入到我的测试中?
【发布时间】:2021-12-08 20:51:22
【问题描述】:

Autofac 可以将依赖项注入我的测试类吗?

考虑测试类(我将示例保持通用,因为我将使用任何框架为我提供此功能)。

public class SimpleTest {

   private IService _service;

   public SimpleTest(IService service) 
   {
       _service = service;
   }

   public void TestMethod() {
   {
       // do something with service
   }
}

该 IService 类型由 autofac 提供。所以现在当我运行我的测试方法时,我希望注入来自 autofac 的各种依赖项。我不介意它是否必须使用字段注入 - 如果需要,我可以将它们公开。

也许我可以注册某种测试运行器来执行此“预配置”?

【问题讨论】:

  • 这是否回答了您的问题? Is it possible to use Dependency Injection with xUnit?
  • 我没有将它标记为 xunit.net...它被标记为 xunit(一般是单元测试)但似乎 xunit 是唯一尝试实现此功能的
  • 在 .NET 世界中,“xUnit”总是指具有该名称的单元测试框架

标签: c# xunit


【解决方案1】:

感谢您的回复。

我添加了一个自定义基类来为我执行此操作...

这是 MSTest 的代码(我正在使用)。

 [TestInitialize]
 public void InjectAutofacDependencies()
 {
      var fieldInfos = this.GetType().GetFields(
         BindingFlags.DeclaredOnly |
         BindingFlags.NonPublic | BindingFlags.Instance);

      foreach (var fieldInfo in fieldInfos)
      {
          var resolveOptional = 
              _container.ResolveOptional(fieldInfo.FieldType);
          if (resolveOptional != null)
          {
               fieldInfo.SetValue(this, resolveOptional);
          }
      }
  }

我更喜欢构造函数注入,但这已经足够了。

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 2018-01-11
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多