【发布时间】: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