小编Rae*_*ald的帖子

从Java方法返回多个值:为什么没有n元组对象?

为什么没有(标准的,Java认证的)解决方案,作为Java语言本身的一部分,从Java方法返回多个值,而不是开发人员必须使用他们自己的方法,如地图,列表,对等.?为什么Java不支持n元组对象?

特别是考虑可以将两个对象一起修改(串联)的普通私有方法,并且在这种情况下作为返回的类型对象听起来有点过分.

java methods return-type

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

测试驱动开发 - 如何在没有实现代码存在之前编写测试

我正在学习TDD,但很难接受它,因为它不是直截了当的.

我无法回答的问题是" 如何在任何实现代码存在之前编写测试? ".

如果我们的目标类/目标方法/目标参数类型/目标返回类型不存在,

  • 在测试中编写代码时我们指的是什么.我们如何开始编写测试?
  • 如果我们所能编写的只是实际实现代码之前的测试方法名称,那么测试如何失败?

每个人都说出为什么,但不是如何

我已经尽力找到资源,详细说明在生产代码之前编写测试但是,假设我错过了良好的资源,他们中的大多数都充满了陈词滥调,解释了为什么TTD比专注于采用它的实践更重要.

一个用例示例.

我们假设我们正在为大学开发软件,我们的用例是课程注册.

为了简单起见,让我们将这个讨论限制在内

  • 场景:"学生每学期最多可以注册3门课程"
  • 测试服务层和dao层.

伪代码

ENROLL(studentId, courseId)
    //check if student enrolled in less than 3 courses in the same semester as given courseId belongs in.
    //if yes, enroll him/her.
    //if not, return an error.
Run Code Online (Sandbox Code Playgroud)

上面的实际实现可能涉及几个涉及服务,daos等的类.

请问您能解释一下如何逐步测试 - 开发它吗?如果您使用TDD实现这一点,您是如何逐步完成的.

我希望这可以帮助像我这样的许多挣扎.

java tdd junit unit-testing

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

JRE和JVM有什么区别?

我认为JVM与.NET Framework类似,对吗?然后什么是JRE?

谢谢!

java jvm

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

CMake多体系结构编译

我想知道如何编写一个CMake设置,允许使用任何编译器和操作系统编译x86和x64架构.

architecture compilation cmake

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

Java太多打开文件

我正在尝试写入多个文件,确切地说是19.写了几百次之后,我得到了Java IOException:打开的文件太多了.但是,就像我说的那样,我打开了19个文件,并且我在开始时打开了所有文件.这里有什么问题?我可以验证写入是否成功.

编辑:我没有使用try-catch-finally块.我让函数抛出异常.现在我把try-catch-finally放在他们周围,他们似乎做得更好.

大多数人都是对的,因为我打开的文件超出了我的想象.还在跟踪事情.稍后我会发布更新.

重新编辑:确保所有文件访问都用try-catch包装 - 最终修复了问题.谢谢

java file-io

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

单元测试处理降级的网络堆栈,文件损坏和其他缺陷

我主要是一个C++编码器,到目前为止,我没有真正为我的所有代码编写测试.我已经确定这是一个坏主意(tm),在添加了巧妙地破坏旧功能的新功能之后,或者,根据您希望如何看待它,引入了他们自己的一些新"功能".

但是,单元测试似乎是一种非常脆弱的机制.您可以在"完美"条件下测试某些内容,但是在内容中断时您无法查看代码的执行情况.例如,对于数据X,例如它是一个爬虫,假设它抓取了一些特定的站点.你只是保存样本页面,对它们进行测试,并希望这些站点永远不会改变吗?这将做工精细的回归测试,但是,你会写什么样的测试,以不断地检查这些网站生活,让你知道当应用程序不这样做的工作,因为该网站改变了一些东西,现在会导致应用程序崩溃?您不希望您的测试套件监控代码的意图吗?

上面的例子有点做作,我还没有遇到过(如果你还没有猜到).但是,让我挑选一些东西.如何测试应用程序将在降级的网络堆栈面前完成其工作?也就是说,说你有丢包适量,对于一个原因或其他,和你有一个功能,DoSomethingOverTheNetwork()应该以优雅降级的时候,它应该堆栈不执行; 但是呢?开发人员通过故意设置一个网关来亲自测试它,该网关在第一次写入时丢弃数据包以模拟坏网络.几个月后,有人检查了一些巧妙地修改某些内容的代码,因此没有及时检测到降级,或者,应用程序甚至没有识别出降级,这种情况从未被发现,因为你无法运行现实世界使用单元测试这样的测试,你呢?

那么,文件损坏怎么样?假设您将一个服务器列表存储在一个文件中,并且校验和看起来没问题,但数据并不是真的.您希望代码处理它,您编写一些您认为可以执行此操作的代码.您如何测试它是否与应用程序的生命周期完全相同?你能?

因此,脆弱.单元测试似乎只在完美的条件下测试代码(这是通过模拟对象等来提升的),而不是它们在野外会面对的.不要误解我的意思,我认为单元测试很棒,但是只有它们组成的测试套件似乎是一种聪明的方法,可以在代码中引入细微的错误,同时对它的可靠性过于自信.

我如何解决上述情况?如果单元测试不是答案,那是什么?

编辑:我看到很多答案都说"只是嘲笑它".好吧,你不能"只是模仿它",这就是原因:以我的降级网络堆栈为例,让我们假设你的函数有一个定义良好的NetworkInterface,我们将嘲笑它.应用程序通过TCP和UDP发送数据包.现在,让我们说,嘿,让我们使用模拟对象模拟界面上10%的损失,看看会发生什么.你的TCP连接增加了他们的重试次数,并增加了他们的后退,所有这些都是很好的做法.你决定改变你的UDP数据包的X%来实际建立TCP连接,有损接口,我们希望能够保证一些数据包的传输,而其他数据包不应该丢失太多.效果很好.同时,在现实世界中..当你增加TCP连接数(或TCP上的数据)时,在一个有足够损耗的连接上,你最终会增加你的UDP数据包丢失,因为你的TCP连接将最终重新开始 - 越来越多地发送他们的数据和/或减少他们的窗口,导致10%的数据包丢失现在实际上更像是90%的UDP数据包丢失.Whoopsie.

没什么大不了的,让我们把它分解为UDPInterface和TCPInterface.等一下......那些是相互依赖的,测试10%的UDP丢失和10%的TCP丢失与上面没有什么不同.

所以,问题是现在你不仅仅是对代码进行单元测试,而是将你的假设引入操作系统的TCP堆栈的工作方式.而且,这是一个坏主意(tm).比避免整个惨败更糟糕的想法.

在某些时候,您将不得不创建一个模拟操作系统,其行为与您的真实操作系统完全相同,除非是可测试的.这似乎不是一个很好的前进方式.

这是我们经历过的事情,我相信其他人也可以添加他们的经验.

我希望有人会告诉我,我错了,并指出原因!

谢谢!

c++ testing unit-testing mocking

45
推荐指数
5
解决办法
2918
查看次数

当我们谈论排序时,自然顺序是什么?

什么是自然排序.假设我有一个Employee对象,其中包含姓名,年龄和加入日期,按自然顺序排序?

language-agnostic sorting

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

JPA何时设置@GeneratedValue @Id

我有一个简单的JPA实体,它使用生成的long"ID"作为其主键:

@Entity
public class Player {
   private long id;

   protected Player() {
     // Do nothing; id defaults to 0L
   }


   @GeneratedValue
   @Id
   public long getId() {
      return id;
   }

   protected void setId(final long id) {
      this.id = id;
   }
   // Other code
}
Run Code Online (Sandbox Code Playgroud)

在此类对象的生命周期中的某个时刻,JPA必须调用setId()以记录生成的ID值.我的问题是,这是什么时候发生的,以及说明这一点的文档在哪里.我查看了JPA规范,但找不到明确的声明.

JPA规范说(重点补充):

托管实体实例是具有持久标识的实例,该标识当前与持久性上下文相关联.

这是否试图说必须管理对象具有@Id重要意义?说明EntityManager.persist()(强调添加)的文档使"实例管理和持久",这是否意味着@Id由该方法设置?或者直到你打电话EntityTransaction.commit()

@Id设置可能是不同的JPA提供商不同,也许不同的生成策略.但是,最安全(可移植,符合规范)的假设是什么,你可以在生命周期的最早点设置它?

java jpa primary-key

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

有没有办法从String生成相同的UUID

我想知道是否有一种方法可以根据String. 我尝试使用UUID 生成相同的UUID,看起来它不提供此功能.

java uuid

44
推荐指数
3
解决办法
3万
查看次数

Apache Commons Logging的运行时发现算法有什么问题

Dave Syer(SpringSource)在他的博客中写道:

不幸的是,关于commons-logging的最糟糕的事情,以及使它不受新工具欢迎的因素,也是运行时发现算法.

为什么?它的运行时发现算法有什么问题?性能?

java logging spring apache-commons-logging

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