gpt4 book ai didi

c# - 如何在单元测试中使用全局变量?

转载 作者:太空狗 更新时间:2023-10-30 00:02:48 41 4
gpt4 key购买 nike

我也需要一个在其他测试的第一个测试中初始化的对象。为了防止代码重复,我想将我在第一个测试中创建的对象保存在一个全局变量中。这就是我所做的:

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));
}
}
}

测试方法 CanInitializeController() 成功,而 isCreated() 失败。

在第一个测试中,我创建了 FilmSelectieController 对象。

我如何在接下来的测试中使用该对象?

感谢 Anthony Pegram

解决方案:

..*/
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
}
/*..

最佳答案

创建一个在初始化时运行的方法,并设置任何需要对该方法中的所有测试可用的对象。 (该方法将在每次测试之前重新运行,因此不要指望状态会持续存在。)

[TestInitialize]
public void Initialize()
{
// your common setup code here
this.controller = ...
}

(TestInitialize 是 MS Test 下的属性,在您可能使用的大多数其他测试框架下也有类似的属性。)

我通常对将在测试中使用的 stub 和模拟执行此操作。至于设置我实际测试的类,我通常会在测试方法本身中处理它或将其重构为私有(private)辅助方法,但这只是个人偏好。如果被测类的设置对于所有测试也是统一的,那么它也可以进入初始化方法。

关于c# - 如何在单元测试中使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29126952/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com