- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个测试套件,我在 @After
中退出系统并在 @AfterClass
中关闭浏览器。我正在尝试使用 @Rule
为每种测试方法使用 Selenium 获取失败的测试屏幕截图。我手动检查了 @Rule
只在每个 @Before
之前运行,但我想在 @Test
之后和 @After 之前设置它
。我找不到简单的解决方案。任何帮助将不胜感激。
public class MorgatgeCalculatorTest {
@Before
public void before(){
System.out.println("I am before");
}
@BeforeClass
public static void beforeclass(){
System.out.println("I am beforeclass");
}
@Test
public void test(){
System.out.println("I am Test");
}
@Test
public void test2(){
System.out.println("I am Test2");
}
@After
public void after(){
System.out.println("I am after");
}
@AfterClass
public static void afterclass(){
System.out.println("I am afterclass");
}
@Rule
ExpensiveExternalResource ExpensiveExternalResource = new ExpensiveExternalResource();
static class ExpensiveExternalResource implements MethodRule {
public ExpensiveExternalResource(){
System.out.println("I am rule");
}
@Override
public Statement apply(Statement arg0, FrameworkMethod arg1, Object arg2) {
// TODO Auto-generated method stub
return null;
}
}
我得到的输出是
I am beforeclass
I am rule
I am before
I am Test
I am after
I am rule
I am before
I am Test2
I am after
I am afterclass
最佳答案
由于规则的设置方式,您不能在@before 之后或@after 之前设置规则。您可以将规则想象成放在测试方法上的 shell。第一个继续的 shell 是@before/@after。此后应用@rules。
做您想做的事情的一种快速方法是完全避免@After。可以创建一个规则,以便在方法失败时截取屏幕截图,然后在代码之后执行您的。它不如@After 漂亮,但它确实有效。 (我还实现了 TestRule,因为 MethodRule 已贬值)。
public class MortgageCalculatorTest {
@Before
public void before(){
System.out.println("I am before");
}
@BeforeClass
public static void beforeclass(){
System.out.println("I am beforeclass");
}
@Test
public void test(){
System.out.println("I am a Test");
}
@Test
public void test2(){
System.out.println("I am a Failed Test");
fail();
}
@AfterClass
public static void afterclass(){
System.out.println("I am afterclass");
}
@Rule
public ExpensiveExternalResource ExpensiveExternalResource = new ExpensiveExternalResource();
public static class ExpensiveExternalResource implements TestRule {
// public ExpensiveExternalResource(){}
public class ExpansiveExternalResourceStatement extends Statement{
private Statement baseStatement;
public ExpansiveExternalResourceStatement(Statement b){
baseStatement = b;
}
@Override
public void evaluate() throws Throwable {
try{
baseStatement.evaluate();
}catch(Error e){
System.out.println("I take a Screenshot");
throw e;
}finally{
after();
}
}
//Put your after code in this method!
public void after(){
System.out.println("I am after");
}
}
public Statement apply(Statement base, Description description) {
return new ExpansiveExternalResourceStatement(base);
}
}
}
规则的所有工作都在一条语句中完成。 org.junit.runners.model.Statement 是代表一组代码的类。因此,这里的 apply 方法接收您正在放置 shell 的代码包。 Apply 返回执行您提供的代码包的语句,并用 try/catch 语句包围它以捕获方法失败。
此方法的输出是:
I am beforeclass
I am before
I am a Test
I am after
I am before
I am a Failed Test
I take a Screenshot
I am after
I am afterclass
希望这对您有所帮助!
关于java - 在 JUnit 中的每个 '@Rule' 之后和每个 '@Test' 之前应用 '@After',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12078982/
在 makefile 中,我可以从另一个规则调用一个规则吗? 类似于: rule1: echo "bye" rule2: date rule3: @ec
我想创建一个只匹配外部链接的 CSS 选择器。问题是它似乎不适用于 :not() 中的多个规则。我不能使用多个 not ( example: ":not():not()") 因为那变成了 ||而不是
我正在动态创建 CSS 动画,所以我需要在我的文档中插入一个 CSS 计时函数。如: @-webkit-keyframes slide { from { -webkit-transfo
错误内容: Error: Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js): HookW
我有这样的文件结构: ---- _base-map.scss ---- _child-map-1.scss ---- _child-map-2.scss ---- _child-map-3.scss
我正在利用 engine.Host 类创建自己的规则引擎实例,并通过 JSON 文件加载规则并调用 set_rulesets() 方法。这一切都运行良好。 持久规则:https://pypi.org/
在无服务器(https://www.serverless.com/framework/docs/providers/aws/events/event-bridge),的EventBridge文档中提到
在无服务器(https://www.serverless.com/framework/docs/providers/aws/events/event-bridge),的EventBridge文档中提到
系统要求我使用最常用的网络规则和应用程序规则配置 Azure 防火墙策略规则集合。 我收集了以下详细信息,其中捕获了最常用的网络规则和应用程序规则。但是我不确定我是否遗漏了任何被认为是最常见的规则?
我想做的是在运行时从 ABNF 语法文件创建一个解析器。我已经在 qi::grammar 中实现了所有 ABNF 规则,如下所示: typedef /*qi::rule or struct conta
对于复杂的多边形(即:自相交),选择缠绕填充规则还是奇偶填充规则会影响多边形的填充方式。 但对于非相交多边形,缠绕或奇偶填充规则之间是否存在任何性能差异。我知道这将是特定于实现的,但哪种算法对于非复杂
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 个月前
我正在尝试将 TypeScript 编译添加到现有的 Javascript 项目中。 AFAIK 这应该是可能的(甚至很容易),并且您可以通过代码库逐步传播 TS。不幸的是,这不是我所看到的——在添加
尝试将 Firebase 部署到其托管服务时。我还使用 firebase 工具来发布安全规则。我看到此错误消息: $ firebase deploy Security Rules Error - s
我在使用 ANTLR4 解析某些 SQL 类型的字符串时遇到问题。解析后的字符串是: WHERE a <> 17106 AND b BETWEEN c AND d AND e BTW(f, g) 这是
我已经在 Android 中创建了一个模块以在我的主应用程序中使用,并且似乎有两个文件Consumer-rules.pro 和 proguard-rules.pro。 我想了解以下内容 所有模块代码都
我正在尝试在另一个自定义规则中加载自定义规则,这两个规则均由 Parasoft 规则向导创建。 以下代码是作为方法放在调用规则中的python片段: def somePythonMethod(node
像许多其他问题一样,我正在尝试使用 Boost.Spirit.Qi 将简单语法解析为结构树。 我会尽量提炼我正在尝试做的事情,以尽可能最简单的情况。我有: struct Integer { int
我的samtools_dup规则存在一些问题。 它在/data/mypipeline.smk的第201行中显示“SyntaxError: 规则samtools_dup中的run/shell/scrip
有人可以向我解释一下这两种情况下负载均衡器(v2)后端实际发生的情况吗: 应用入站 NAT 规则。 应用负载平衡规则。 最佳答案 当您有 1 台后端服务器或者您知道要访问哪个后端服务器时,您将使用 N
我是一名优秀的程序员,十分优秀!