在Nunit测试中实例化接口的位置

时间:2010-10-26 23:34:59

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

我认为这是非常简单的,我很想念,所以我提前道歉。我正在尝试使用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容器中注册了存储库,并且在我的所有控制器中工作正常,只是无法弄清楚如何测试界面。我唯一的解决方案是在设置方法中为接口分配一个具体的实现,但我想知道我是否假设使用DI来处理它。

1 个答案:

答案 0 :(得分:1)

询问并且您将收到:)

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

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

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