【问题标题】:Where to instantiate interface in Nunit test在 Nunit 测试中实例化接口的位置
【发布时间】:2010-10-26 23:34:58
【问题描述】:

我认为我缺少一些非常简单的东西,所以我提前道歉。我正在尝试使用 Nunit 测试接口。该接口由派生自基类的类实现,我将 Castle Windsor 用于 IOC。我根本不知道在派生测试类中分配接口的位置。

这是基础测试类

[TestFixture]
public class BaseTest
{
    protected ISession session;
    [SetUp]
    public void setup() {
        NHibernateConfig.Init(
            MsSqlConfiguration.MsSql2008.ConnectionString(
            builder =>
            builder.Server("localhost")
            .Database("Db_test")
            .TrustedConnection()),
            RebuildDatabase());
        session = NHibernateConfig.CreateAndOpenSession();
    }
    [Test]
    public void Shoud_Test_Connection(){
        // testing connection via setup fixture
    }
    [TearDown]
    public void TearDown(){
        if (session != null)
            session.Dispose();
    }
    private Action<Configuration> RebuildDatabase() {
        return config => new SchemaExport(config).Create(false, true);
    }
}

这里是派生的测试类

[TestFixture]
public class RepositoryTest : BaseTest
{
    IRepository repository;
    [SetUp]
    public void Setup(){
      // I think the interface should get assigned
      // in here somehow....
    }
    [Test]
    public void Should_Create_And_Read(){
        var post = CreatePost();
        var actual = (IList) repository.GetAll();
        Assert.Contains(post, actual);
        Assert.AreEqual(1, actual.Count);
    }
}

我在我的 windsor 容器中注册了存储库,并且在我的所有控制器中都可以正常工作,只是不知道如何测试接口。我唯一的解决方案是在 setup 方法中为接口分配一个具体的实现,但我想知道我是否应该使用 DI 以某种方式处理它。

【问题讨论】:

  • 等等...什么?您意识到接口只是实现某些东西而不是实际实现的合同吗?那么你将如何“测试”界面呢?您可以创建接口的模拟实现以使测试更容易,或者您可以测试接口的实际实现。我不明白你在问什么?
  • 我想知道是否有办法用我的 IOC 容器为接口分配一个具体的实现。
  • 好的,是的,你可以这样做。您需要在测试中引用您的容器,并且需要调用 .Resolve() 我相信这就是 Castle 所说的他们的方法,但我可能是错的。
  • @Foovanadil - 您能否将您的评论移至答案回复中,以便我将其标记为答案...您的评论正是我想要的,我只是不知道如何实施那。你能澄清一下我将如何在测试夹具中引用我的容器吗?

标签: c# asp.net asp.net-mvc-2 nunit


【解决方案1】:

询问,您将收到:)

您需要在测试中引用您的容器,并且需要调用 .Resolve() 我相信这就是 Castle 所说的他们的方法,但我可能是错的。

为了在测试中获得对容器的引用,您需要在某个时候创建​​容器。我并不是真正的 Castle 专家,但查看此页面上的代码看起来像是一个关于如何新建容器和解决依赖关系的非常简单的示例

http://stw.castleproject.org/Windsor.MainPage.ashx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2013-07-02
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多