我的要求是对一组测试进行一些初始化,并在所有测试完成后将其清除。这些测试围绕几个测试类进行,因为它们不是密切相关的,但需要一个共同的初始化。
我正在使用@SelectClasses来形成套件并尝试使用@ExtendWith应该处理预处理和后处理的自定义扩展。这不起作用,我不确定 JUnit 中是否存在合适的解决方案。共享已经尝试过的示例代码。
套房:
@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}
Run Code Online (Sandbox Code Playgroud)
延期:
public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {
@Override
public void afterAll(ExtensionContext context) throws Exception {
System.out.println("afterAll");
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
System.out.println("beforeAll");
}
}
Run Code Online (Sandbox Code Playgroud)
测试类 1:
public class FirstTest {
@Test
void test1(){
System.out.println("test1");
}
}
Run Code Online (Sandbox Code Playgroud)
测试类 2:
public class SecondTest {
@Test
void test2(){
System.out.println("test2");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
test1
test2
Run Code Online (Sandbox Code Playgroud)
预期输出:
beforeAll
test1
test2 …Run Code Online (Sandbox Code Playgroud) 我在每个@Test 上都有带有 allure2 @Tmslink("1234") 注释的测试。所以,我需要获取 @TmsLink 值并在我的测试中使用它。我在扩展中有注释值,但我如何提供它来测试?
public class TmsLink implements BeforeTestExecutionCallback {
private String tmsLink;
@Override
public void beforeTestExecution(ExtensionContext context) {
findAnnotation(context.getElement(), TmsLink.class).ifPresent(link -> this.tmsLink = link.value());
}
public String getTmsLink() {
return tmsLink;
}
}
@ExtendWith(TmsLink .class)
public abstract class Tests {
}
Run Code Online (Sandbox Code Playgroud)
使用 Junit4,它只是:
@Rule
public TmsLink extension = new TmsLink();
extension.getTmsLink();
Run Code Online (Sandbox Code Playgroud) 我正在学习Prolog,特别是我专注于列表.
给定一个数n,从返回号码列表0来n.
例如,给定2输出将是[0,1,2]
这是我的代码:
num2list(0,[0]).
num2list(X,[H|T]) :-
H is X,
N is X-1,
num2list(N,T).
Run Code Online (Sandbox Code Playgroud)
输出num2list(2,X)是X=[2,1,0].
也许解决方案是愚蠢的,但我找不到办法.我试图对我的代码进行一些修改,但我只是得到了错误.
这个程序是我的,我不想使用像"in"之类的标准谓词,因为我不知道,我想做一个纯粹的递归.
那么这是一个简单的方法呢?
我在书中看到这样做,我希望保持这种方式.
我需要写(不计算)数字列表的所有状态,这意味着:
输入:
Numbers: 1,2,3
Operators: +,-,/,*
Run Code Online (Sandbox Code Playgroud)
输出:
1+2+3
1-2-3
1/2/3
1*2*3
1+2-3
1+2/3
1+2*3
1-2+3
1-2/3
1-2*3
1/2+3
1/2-3
1/2+3
1*2+3
1*2-3
1+2-3
Run Code Online (Sandbox Code Playgroud)
在下降代码中显示 1+2+3
我怎样才能将它们发展到所有州?
list_sum([Item], Item).
list_sum([Item1,Item2 | Tail], Total) :-
list_sum([Item1+Item2|Tail], Total).
Run Code Online (Sandbox Code Playgroud) 在Prolog中用函子编写的数据很常见,例如
note("This is a note")
Run Code Online (Sandbox Code Playgroud)
但是Prolog也可以使用名称移至参数来处理数据,例如
(note,"This is a note")
Run Code Online (Sandbox Code Playgroud)
将数据名称从函子移动到参数中时,是否存在用于描述此过程的名称?
我有一些代码将对数据进行这样的转换,并希望在文档中包含一个标准名称来描述此更改(如果存在)。
编辑
当前执行此操作的特定原因是,我不必使用= .. / 2,并且还可以使用匿名变量对许多数据进行比较,例如
(_,A,B,C)
Run Code Online (Sandbox Code Playgroud)
或写更多的通用谓词,例如
do(_)
do(_,A)
do(_,A,B)
Run Code Online (Sandbox Code Playgroud)
代替
do(note(A))
do(note(A,B))
do(note(A,B,C))
do(comment(A))
do(comment(A,B))
do(comment(A,B,C))
do(text(A))
do(text(A,B))
do(text(A,B,C))
Run Code Online (Sandbox Code Playgroud)
编辑
以下是@repeat的评论,其理由是不通过将复合词更改note(A,B)为逗号列表(A,B)(而不是常规列表)来执行此问题中演示的操作[A,B]。这是一个很好的建议,但有时有理由中断此类建议。我目前不能满足我当前的需要,如果在Prolog中这样做是否是其中一种情况,但是正如问题所问的那样,最好为该过程取一个名称,以便可以对其进行搜索以进行研究。
@repeat您可以编辑它并添加注释,因为它们都是知识共享。
如何在F#中检索元组的头部和尾部?
例如Conj (a, b),头部是Conj,尾部是(a, b).
我想buildtree在每个参数上递归运行函数,把头作为Node元素,F#中的映射在哪里?
let rec getparams = map List.head (List.tail getparams);
type Elem = Prop
type Tree = E | T of Elem * Tree * Tree
let rec buildtree vars = function
| E = head vars
| T = buildtree (getparams vars)
Run Code Online (Sandbox Code Playgroud)更新后:
open System
open Microsoft.FSharp.Reflection
// Learn more about F# at http://fsharp.net
//type Prop = {a: string; b: string}
//let Prop a b …Run Code Online (Sandbox Code Playgroud) 一个完全无用的问题:我买了一个数字游戏,它是由两个黑色骰子和5个彩色骰子组成的.两个黑色数字形成一个2位数字,范围从11到66,其他5个是您可以使用的数字,将它们与所有可能的数字表达式组合在一起,以获得目标数字.
例如,黑色40 + 2:目标42
彩色5 3 6 2 4,你可以通过5 3 + 6*4 2 +获得目标 - (使用RPN因为它避免了括号).
现在我想在我们玩游戏的时候用我的掌上电脑找到最好的答案.
我必须说我对解决方案并没有太多考虑,我只是寻找关于查找参数排列的部分,但是接下来如何从中生成可能的表达式?我会使用RPN并枚举表达式的所有可能的"形状",然后用+ - */填充空白.
我不认识枚举表达式形状的问题.
输出将是:..... xxxx .... x.xxx ... x..xxx .. x ... xxx .... xx.xx ... xxxx ..x..x .xx ... xx..xx ..xx.xx .... xxx.x ... x.xx.x ..x..xx.x ... xx.xx ..xxxx
例如:.. xx ... xx ... xxx..x ..x.xx..x ..x.xx..x无效,因为第二个或第三个运算符会找到一个操作数.
我可以使用硬编码列表,但它看起来真的很难看!
我正在尝试定义以下函数(在Seq模块名称中共享空间).
module Seq =
let scale value sequence =
sequence
|> Seq.map (fun v -> v * value)
Run Code Online (Sandbox Code Playgroud)
然而,类型推断强加元素和值是类型int.我希望这个方法可以处理整数(8位,16位等),浮点数(单和双)等.
为什么类型推断会跳转到int,以及如何使此函数更通用?
创建一个带有两个参数的函数,一个整数和一个五元素的整数元组,如果元组的任何三个元素的总和大于第一个参数,则返回true,否则返回false.
let func el tupl =
match tupl with
|(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true
| _-> false
Run Code Online (Sandbox Code Playgroud) 以下代码将列表分成以"["开头并以"]"结尾的子列表.如何将其转换为使用,yield return以便它可以懒惰地处理非常大的流输入? - 或者如何在F#中使用lazily枚举来实现它? - (没关系,我认为f#实现应该是微不足道的)
var list = new List<string> { "[", "1", "2", "3", "]", "[", "2", "2", "]", "[", "3", "]" };
IEnumerable<IEnumerable<string>> result = Split(list);
static IEnumerable<IEnumerable<string>> Split(List<string> list)
{
return list.Aggregate(new List<List<string>>(), // yield return?
(sum, current) =>
{
if (current == "[")
sum.Add(new List<string>());
else if (current == "]")
return sum; // Convert to yield return?
else
sum.Last().Add(current);
return sum; // Convert to yield return?
});
}
Run Code Online (Sandbox Code Playgroud)