【发布时间】:2023-03-05 07:29:01
【问题描述】:
所以目前我有一个弹簧单元测试应用程序。它要求我从外部身份验证源获取会话 cookie。问题是什么,这个身份验证过程相当昂贵且耗时,我正在尝试创建一个结构,我在其中通过任何子类进行一次身份验证,并创建任何后续子类,它将重用此会话 cookie 而不会命中身份验证再次处理。
我现在的问题是,每次创建另一个子类时,静态 cookie 都是空的。而且我一直在阅读使用静态作为全局变量是一个坏主意,但我想不出另一种方法来做到这一点,因为 Spring 框架在运行时设置了一些东西,以及我将如何设置 cookie 以便所有其他类可以使用它。
另一条信息。该变量正在使用,但在运行时可以更改。它不是一个单一的用户被全面登录和使用。但更像是 Sub1 会调用登录,并且我们有一个 cookie。然后多个测试将使用该登录名,直到 SubX 进来并说,我正在使用不同的凭据,所以我需要以其他身份登录。并重复。
这是我的代码大纲:
public class Parent implements InitializingBean {
protected static String BASE_URL;
public static Cookie cookie;
... All default InitializingBean methods ...
afterPropertiesSet() {
cookie = // login process returns a cookie
}
}
public class Sub1 extends Parent {
@resource public String baseURL;
@PostConstruct
public void init() {
// set parents with my baseURL;
BASE_URL = baseURL;
}
public void doSomething() {
// Do something with cookie, because it should have been set by parent class
}
}
public class Sub2 extends Parent {
@resource public String baseURL;
@PostConstruct
public void init() {
// set parents with my baseURL;
BASE_URL = baseURL;
}
public void doSomethingElse() {
// Do something with cookie, because it should have been set by parent class
}
}
【问题讨论】:
-
Sub1 和 Sub2 是否扩展 Parent 仅用于访问 Cookie?还是它们也衍生出其他功能?
-
它也继承了很多其他的功能,而且不只是Sub1或者Sub2,更像是Sub1喜欢100+,因为它是一个测试集合。
-
除了cookie之外,Sub1、Sub2、...中还有其他状态吗?
标签: spring unit-testing inheritance global-variables subclass