我在then子句中有一个带循环的测试:
result.each {
it.name.contains("foo")
it.entity.subEntity == "bar"
}
for (String obj : result2) {
obj.name.contains("foo")
obj.entity.subEntity == "bar"
}
Run Code Online (Sandbox Code Playgroud)
最近我意识到循环没有真正测试过.无论我是否有foo或bar或其他任何东西,测试总是绿色的:)我发现,循环必须以不同的方式进行测试,例如使用'every'?但只是将'each'更改为'every'抛出异常:
result.every {
it.name.contains("foo")
it.entity.subEntity == "bar"
}
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Spec expression: 1: expecting '}', found '==' @ line 1, column 61.
s("foo") it.entity.rootEntity == "bar" }
Run Code Online (Sandbox Code Playgroud)
我应该如何在测试中正确使用循环?我正在使用spock 0.7-groovy-2.0
我正在使用spring boot 1.5.8并想测试我的客户端:
@Component
public class RestClientBean implements RestClient {
private Map<String, RestTemplate> restTemplates = new HashMap<>();
@Autowired
public RestClientBean(RestTemplateBuilder builder, SomeConfig conf) {
restTemplates.put("first", builder.rootUri("first").build();
restTemplates.put("second", builder.rootUri("second").build();
}
}
Run Code Online (Sandbox Code Playgroud)
通过以下测试:
@RunWith(SpringRunner.class)
@RestClientTest(RestClient.class)
public class RestClientTest {
@Autowired
private RestClient client;
@Autowired
private MockRestServiceServer server;
@TestConfiguration
static class SomeConfigFooBarBuzz {
@Bean
public SomeConfig provideConfig() {
return new SomeConfig(); // btw. not sure why this works,
// but this is the only way
// I got rid of the "unable to …Run Code Online (Sandbox Code Playgroud) 在oracle数据库上,我有一个外键,不知道它的名字,只有column_name和reference_column_name.我想写一个sql脚本,如果它存在,应该删除这个外键,所以这是我使用的代码:
declare
fName varchar2(255 char);
begin
SELECT x.constraint_name into fName FROM all_constraints x
JOIN all_cons_columns c ON
c.table_name = x.table_name AND c.constraint_name = x.constraint_name
WHERE x.table_name = 'MY_TABLE_NAME' AND x.constraint_type = 'R' AND c.column_name ='MY_COLUMN_NAME';
end;
Run Code Online (Sandbox Code Playgroud)
这个脚本的输出是"匿名块完成",所以它很成功,但是当我添加drop部分时:
declare
fName varchar2(255 char);
begin
SELECT x.constraint_name into fName FROM all_constraints x
JOIN all_cons_columns c ON
c.table_name = x.table_name AND c.constraint_name = x.constraint_name
WHERE x.table_name = 'MY_TABLE_NAME' AND x.constraint_type = 'R' AND c.column_name ='MY_COLUMN_NAME';
if (fName != '') THEN
alter table MY_TABLE_NAME drop …Run Code Online (Sandbox Code Playgroud) 假设我有一个返回范围或即时向量的 promQL:范围向量 ->metric[1h]或实例向量 ->increase(metric[1h])
有没有办法将范围转换为即时向量和/或反之亦然?因为许多数学运算/函数只能在即时向量上进行。
如果无法进行转换,有没有办法对范围向量的每个值应用某个操作或函数?例如(值的平方):
(7 @1554105600, 5 @1554710400, 2 @1555315200, 12 @1555920000) 变成
(49 @1554105600, 25 @1554710400, 4 @1555315200, 144 @1555920000)
declare
fName varchar2(255 char);
begin
SELECT x.constraint_name into fName FROM all_constraints x
JOIN all_cons_columns c ON
c.table_name = x.table_name AND c.constraint_name = x.constraint_name
WHERE x.table_name = 'MY_TABLE_NAME' AND x.constraint_type = 'R' AND c.column_name ='MY_COLUMN_NAME';
if fName is not null THEN
execute immediate 'alter table MY_TABLE_NAME drop constraint ' || fName;
end if;
SELECT x.constraint_name into fName FROM all_constraints x
JOIN all_cons_columns c ON
c.table_name = x.table_name AND c.constraint_name = x.constraint_name
WHERE x.table_name = 'OTHER_MY_TABLE_NAME' AND x.constraint_type = 'R' AND c.column_name …Run Code Online (Sandbox Code Playgroud) 我使用子查询来获取上周每小时的聚合值,例如:上周整周每小时的 http 请求数,它将返回范围向量中的 168 个值。
delta(http_server_requests_seconds_count[1h])[1w:1h]
Run Code Online (Sandbox Code Playgroud)
现在我想过滤该值以仅返回特定工作日的值,假设仅返回星期一的 24 值。我发现了一些关于 day_of_week、timestamp、bool expr 的提示,但我无法将它们组合起来使其正常工作,或者也许这是不可能的?就像是:
delta(http_server_requests_seconds_count[1h])[1w:1h] bool day_of_week() == 1
Run Code Online (Sandbox Code Playgroud) 我想实现一个带有静态内部类的构建器模式,比如说类A带有字段(a1,a2,a3),B带有字段(b1,b2),C带有字段(c1),而所有共享字段(s1,s2) )来自超级SuperClass:
public class A extends SuperClass {
private final String a1;
...
private A(ABuilder builder) {
super(builder);
this.a1 = builder.a1;
...
}
public static class ABuilder extends SuperClassBuilder implements ABuilderInterface {
private String a1;
...
@Override
public ABuilder withA1(String a1) {
this.a1 = a1;
return this;
}
...
@Override
public SuperClass build() {
return new A(this);
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,对于B和C,构建器只是不同,它们有自己的字段并实现它们自己的接口(BBuilderInterface和CBuilderInterface),而这些接口只定义要实现的方法:
public interface ABuilderInterface extends SuperClassBuilderInterface {
ABuilderInterface withA1(String a1);
...
}
...<interfaces for B and C>
public interface SuperClassBuilderInterface …Run Code Online (Sandbox Code Playgroud) java ×2
loops ×2
oracle ×2
prometheus ×2
promql ×2
builder ×1
clause ×1
constraints ×1
dayofweek ×1
exception ×1
filter ×1
function ×1
inheritance ×1
operators ×1
resttemplate ×1
select ×1
spock ×1
sql ×1
sql-drop ×1
testing ×1