小编ata*_*man的帖子

用nunit测试事件

我刚刚开始使用TDD,可以解决我自己遇到的大部分问题.但现在我迷路了:如何检查事件是否被解雇?我在寻找类似的东西Assert.Raise,Assert.Fire但什么都没有.谷歌不是很有用,大多数的点击是类似的建议,foo.myEvent += new EventHandler(bar); Assert.NotNull(foo.myEvent);但没有任何证据.

谢谢!

c# events nunit unit-testing c#-2.0

36
推荐指数
4
解决办法
2万
查看次数

-XX:MaxRAMFraction = 1是否适合在集装箱环境中生产?

Java 8/9为-XX:+UseCGroupMemoryLimitForHeap(with -XX:+UnlockExperimentalVMOptions)带来了支持.这设置-XX:MaxRAM为cgroup内存限制.默认情况下,JVM分配大约25%的最大RAM,因为-XX:MaxRAMFraction默认值为4.

例:

MaxRAM = 1g
MaxRAMFraction = 4
JVM is allowed to allocate: MaxRAM / MaxRAMFraction = 1g / 4 = 256m
Run Code Online (Sandbox Code Playgroud)

仅使用25%的配额似乎是部署的浪费(通常)由单个JVM进程组成.所以现在人们设置了-XX:MaxRAMFraction=1,所以JVM理论上允许使用100%的MaxRAM.

对于1g示例,这通常会导致堆大小约为900米.这似乎有点高 - JVM或其他东西(如远程shell或进程外任务)没有很多空闲空间.

那么这个配置(-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1)被认为是安全的甚至是最佳实践吗?或者我应该还是伸手接-Xmx,-Xms,-Xss等?

java jvm docker

30
推荐指数
2
解决办法
1万
查看次数

MappedSuperclass - 在子类中更改SequenceGenerator

我正在使用JPA2和Hibernate,并尝试为我的实体引入一个公共基类.到目前为止看起来像这样:

@MappedSuperclass
public abstract class BaseEntity {

    @Id
    private Long id;

    @Override
    public int hashCode() {
        // ...
    }

    @Override
    public boolean equals(Object obj) {
        // ...
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,对于每个表都有一个$entityname_seq我想用作序列生成器的序列.如何从我的子类中设置它?我想我需要覆盖@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator.

java jpa sequence java-ee mappedsuperclass

26
推荐指数
2
解决办法
2万
查看次数

为什么在这种情况下为原始函数返回null?

这段丑陋的代码确实可以编译但是会抛出NPE s == null

public static boolean isNullOrEmpty(String s)
{
    return s != null ? s.isEmpty() : null;
}
Run Code Online (Sandbox Code Playgroud)

虽然这不(如预期):

public static boolean isNullOrEmpty(String s)
{
    if(s != null)
        return s.isEmpty();
    else
        return null;
}
Run Code Online (Sandbox Code Playgroud)

我知道它们都是明显错误的,但是当我在源代码中找到第一段代码时,我很惊讶它编译了.

编辑:这是Java 7中JLS的相关部分.我猜测第一个语句适用但粗体语句适用.

15.25条件运算符?:

[...]

条件表达式的类型确定如下:

[...]

  • 如果第二个和第三个操作数之一是原始类型T,而另一个操作数的类型是将装箱转换(第5.1.7节)应用于T的结果,那么条件表达式的类型是T.

[...]

  • 否则,第二和第三操作数分别是S1和S2类型.设T1是将拳击转换应用于S1所产生的类型,让T2为应用到S2的装箱转换所产生的类型.条件表达式的类型是将捕获转换(第5.1.10节)应用于lub(T1,T2)(第15.12.2.7节)的结果.

java jls

18
推荐指数
1
解决办法
1620
查看次数

在JPA2(JPQL)中仅比较日期(没有时间)

我试图将Calendars与JPA2 进行比较.查询看起来有点像:

TypedQuery<X> q = em.createQuery("select r from Record r where r.calendar= :calendar", X.class);
Calendar c = foo(); // setting fields and stuff
q.setParameter("calendar", c);
Run Code Online (Sandbox Code Playgroud)

但是,这会比较日期+时间.我想知道MM:DD:YYYY是否相等而且不关心时间.有没有一种很好的方法在JPA2中做到这一点,还是我必须创建一个本机查询?

我尝试将HH:MM:SS:...设置为零,然后将其保存在数据库中,但我不知道这是非常明智的,关于时区和夏令时和东西.

datetime jpa date jpql jpa-2.0

15
推荐指数
4
解决办法
4万
查看次数

断言响应体是空列表,放心

如果响应json是一个空列表,我该如何与rest-assured(2.4.0)一起检查?

鉴于响应[](带标题content-type=application/json)我试过:

.body(Matchers.emptyArray()) // expected: an empty array, actual: []
.body("/", Matchers.emptyArray()) // invalid expression /
.body(".", Matchers.emptyArray()) // invalid expression .
Run Code Online (Sandbox Code Playgroud)

java rest-assured

15
推荐指数
1
解决办法
2万
查看次数

如何使用Spring Data MongoDB通过GridFS ObjectId获取二进制流

我无法弄清楚如何使用spring-data-mongodb从GridFS流式传输二进制文件,以及GridFSTemplate当我已经拥有权限时ObjectId.

GridFSTemplate返回GridFSResource(getResource())或GridFSFile(findX()).

我可以GridFSFile通过ID 获取:

// no way to get the InputStream?
GridFSFile file = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(id)))
Run Code Online (Sandbox Code Playgroud)

但没有明显的路怎么走一个InputStreamGridFSFile.

只有GridFSResource让我获得corresonding的保持InputStreamInputStreamResource#getInputstream.但获得一个的唯一方法GridFSResource是通过它filename.

// no way to get GridFSResource by ID?
GridFSResource resource = gridFsTemplate.getResource("test.jpeg");
return resource.getInputStream();
Run Code Online (Sandbox Code Playgroud)

不知何故,GridFsTemplateAPI意味着文件名是唯一的 - 它们不是.该GridFsTemplate实现只返回的第一个元素.

现在我正在使用本机MongoDB API,一切都有意义:

GridFS gridFs = new GridFs(mongo);
GridFSDBFile nativeFile = gridFs.find(blobId);
return nativeFile.getInputStream();
Run Code Online (Sandbox Code Playgroud)

看起来我误解了Spring …

mongodb spring-data spring-data-mongodb

13
推荐指数
2
解决办法
5597
查看次数

Java 记录和空对象模式?

有没有办法用 Java 记录做空对象?对于课程,我会这样做:

public class Id {

  public static final Id NULL_ID = new Id();

  private String id;

  public Id(String id) {
    this.id = Objects.requireNonNull(id);
  }

  private Id() {}
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为每个构造函数都需要经过规范的 ( Id(String id)构造函数,而我不能只是调用super()来绕过不变量。

public record Id(String id) {
  public static final Id NULL_ID = null; // how?

  public Id {
    Objects.requireNonNull(id);
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我解决了这个问题

public Id {
  if (NULL_OBJECT != null)
    Objects.requireNonNull(id);
}
Run Code Online (Sandbox Code Playgroud)

但这感觉不对,并且容易出现并发问题。

我还没有发现很多关于记录背后的设计思想的讨论,这可能已经讨论过了。如果像这样保持简单,那是可以理解的,但感觉很尴尬,我已经在小样本中多次遇到这个问题。

java null-object-pattern java-14 java-record

11
推荐指数
2
解决办法
711
查看次数

测试属性是否与nunit抛出异常

似乎没有属性的代表.有没有方便的方法来做到以下几点?

Assert.Throws<InvalidOperationException>(
       delegate
       {
           // Current is a property as we all know
           nullNodeList.GetEnumerator().Current;
       });
Run Code Online (Sandbox Code Playgroud)

c# delegates properties nunit-2.5 c#-2.0

9
推荐指数
2
解决办法
2587
查看次数

为什么在重建时构建后,源代码中的更改并不总是反映在机器代码中?

有时当我更改Qt项目中的代码(Qt Creator 2.1.0 with mingw32)时,更改不会在生成后生成的机器代码中反映出来.这种情况主要发生在我更改构造函数中的默认值或方法/构造函数中的参数顺序时.通常,完全重建会修复(但需要几分钟).

我正在帮助自己在构建之前删除生成的可执行文件或库,这似乎在大多数时候都有帮助.这是否意味着链接目标文件时会出现问题?

我来自java/.net,我习惯了不同的行为.如果有人能解释我的错误和/或指向一些相关文章,我会很高兴.

谢谢!

c++ qt build

9
推荐指数
1
解决办法
2883
查看次数