【发布时间】:2015-03-18 16:04:17
【问题描述】:
我也需要一个在其他测试的第一个测试中初始化的对象。 为了防止代码重复,我想将我在第一个测试中创建的对象保存在一个全局变量中。这就是我所做的:
namespace Project.WebUIV2.Tests {
[TestClass]
public class FilmSelectieControllerTests {
private FilmSelectieController controller;
[TestMethod]
public void CanInitializeController() {
Mock<IRepository<Voorstelling>> mockIRepository1 = new Mock<IRepository<Voorstelling>>();
Mock<IRepository<Film>> mockIRepository2 = new Mock<IRepository<Film>>();
Mock<IRepository<Zaal>> mockIRepository3 = new Mock<IRepository<Zaal>>();
Film film = new Film { titel = "Film" };
mockIRepository2.Setup(m => m.Add(film));
var repository1 = mockIRepository1.Object;
var repository2 = mockIRepository2.Object;
var repository3 = mockIRepository3.Object;
var controller = new FilmSelectieController(repository1, repository2, repository3);
Assert.IsNotNull(controller);
Assert.IsInstanceOfType(controller, typeof(FilmSelectieController));
this.controller = controller;
}
[TestMethod]
public void IsCreated() {
Assert.IsInstanceOfType(controller, typeof(FilmSelectieController));
}
}
}
Testmethod CanInitializeController() 成功,而 isCreated() 失败。
在第一个测试中,我创建了 FilmSelectieController 对象。
如何在接下来的测试中使用该对象?
感谢安东尼·佩格拉姆
解决办法:
..*/
private Controller controller;
[TestInitialize]
public void Initialize() {
var parameter = /*...test data that i need in all tests...*/
this.controller = new Controller(parameter)
}
[TestMethod]
public void test1 {
result = controller.FirstMethod();
//assert something
}
[TestMethod]
public void test2 {
result = controller.SecondMethod();
//assert something
}
/*..
【问题讨论】:
-
您应该在每次设置例程中重新创建它。
-
一开始我就是这么做的,然后我认为那是代码重复,我认为有办法防止这种情况发生。
-
写一个新方法。在单元测试中重复对我来说很好。
-
如果您发现自己重复了大量代码,请尝试将其抽象为清楚表达意图的类/方法。复制本身在单元测试中并不好,如果您的代码发生更改,您不想使用几乎相同的 sn-p 更新 600 个单元测试。投资于您的测试项目设计和架构,它本质上是您的生产代码的一部分,如果不是更重要的话。
-
哈哈我遇到了你的问题,我们正在做完全相同的项目! (也在 Avans Hogeschool)
标签: c# unit-testing model-view-controller