我刚开始玩Guice,我能想到的一个用例是在测试中我只想覆盖单个绑定.我想我想使用其余的生产级别绑定来确保正确设置所有内容并避免重复.
所以想象我有以下模块
public class ProductionModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceA.class).to(ConcreteA.class);
binder.bind(InterfaceB.class).to(ConcreteB.class);
binder.bind(InterfaceC.class).to(ConcreteC.class);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我只想覆盖InterfaceC,同时保持InterfaceA和InterfaceB,所以我想要像:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
Run Code Online (Sandbox Code Playgroud)
我也试过以下,没有运气:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
Run Code Online (Sandbox Code Playgroud)
有谁知道是否有可能做我想做的事情,或者我完全咆哮错误的树?
---跟进:如果我在接口上使用@ImplementedBy标记,然后在测试用例中提供一个绑定,看起来我可以实现我想要的,当它之间存在1-1映射时,它可以很好地工作界面和实现.
此外,在与同事讨论之后,似乎我们将推翻覆盖整个模块并确保正确定义模块.这似乎可能会导致问题,虽然绑定在模块中放错位置并需要移动,因此可能会破坏大量测试,因为绑定可能不再可用于覆盖.
多年来我一直是EasyMock的粉丝,多亏了SO,我遇到了对PowerMock的引用,并且它能够模拟构造函数和静态方法,这两种方法在将测试转换为遗留代码库时都会导致问题.
显然,单元测试(和TDD)的巨大好处之一是它导致(强制?)更清洁的设计,在我看来,PowerMock的引入可能会减损它.我会看到这主要表现为:
除此之外,关于我的代码被操作用于测试的字节码,对我来说并不合适.我不能真正给出具体的理由,只是因为它只是为了测试而不是为了制作而让我感到有点不安.
在我目前的演出中,我们真的推动单元测试作为人们改进编码实践的一种方式,感觉将PowerMock引入等式可能会让人们稍微跳过这一步,因此我不愿意开始使用它.话虽如此,我真的可以看到在哪里使用它可以减少开始测试类需要完成的重构量.
我想我的问题是,人们使用PowerMock(或任何其他类似的库)获得这些功能的经验是什么,你会使用它们吗?你希望你的测试对你的设计有多大影响?
我已经被感染了很长一段时间了,但看起来大多数与我一起工作的开发人员从来没有尝试过或因为某种原因而解雇它,其中的论点通常是它增加了开发的开销或者它们不需要打扰.
最让我困扰的是,当我来对他们的代码进行更改时,我很难接受测试,因为我必须应用重构来使其可测试,有时最终只需要做很多工作这样我就可以测试我即将编写的代码.
我想知道的是,你会用什么论据来说服其他开发人员开始编写单元测试?我介绍过的大多数开发人员都非常了解它,看到它的好处并继续使用它.这似乎总是好的开发人员,他们已经对提高代码质量感兴趣,因此可以看到单元测试如何做到这一点.
如何说服其他杂技团队?我不是在寻找测试好处列表,因为我已经知道它们是什么,但是您使用或将用于让其他人加入的技术.关于如何说服管理层发挥积极作用的提示也值得赞赏
我试图在Windows上的Ubuntu上使Bash中的节点工作.
我刚刚开始在Windows上使用Ubuntu上的Bash,所以我可能正在做一些新手的错误.
我已经完成apt-get install了node
# sudo apt-get install node
Reading package lists... Done
[...]
Run Code Online (Sandbox Code Playgroud)
该命令提供合理的输出.
但是当我真正尝试运行命令时,我得不到任何回应.没有错误信息,没有
# node -v
# node
#
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一个应用程序需要iPhone屏幕保持活动(或不,取决于用户选择).我已经通过禁用应用程序空闲计时器来完成此操作,该计时器正常工作,直到我开始通过MPMusicPlayerController播放媒体.由于SDK中的错误,然后重新启用空闲计时器,没有明显的方法再次禁用它.
我的应用流程是:
我在后台播放一个空的音频文件以阻止手机进入深度睡眠状态,但我真的想让屏幕保持解锁状态.
有没有人设法找到解决方法?
我正在寻找一个方法,如果传递的字符串是有效数字(例如"123.55e-9"," - 333,556"),则返回一个布尔值.我不希望只是做:
public boolean isANumber(String s) {
try {
BigDecimal a = new BigDecimal(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,该函数应使用状态机(DFA)来解析字符串,以确保无效示例不会欺骗它(例如"-21,22.22.2","33-2").你知道这个库是否存在吗?我真的不想自己写,因为这是一个明显的问题,我相信我会重新发明轮子.
谢谢,
缺口
我只是学习Wicket,谷歌搜索产生了关于如何使用Wicket主题/模板网站的不同结果.似乎常见的方法是:
在Wicket中做到这一点的最佳做法/"正确"方法是什么?或者这些不同的方法各有特定的用途?
我有一个令人费解的情况,我需要一个专家意见,以解释下面解释的现象的原因.几周前,我进行了一次名为"Java开发人员概述"的会议,作为其中的一部分,我编写了一个快速类C#(3.5框架)来从文件中读取并逐行写入另一个文件(在迭代中).由于我的观众是java开发人员,我在java类中使用相同的代码进行并排比较.但是,当我在同一台机器上运行这些类时,令我惊讶的是,java代码的运行速度始终是C#代码的两倍.我已尝试在C#代码中进行许多优化以缩小差距,但无法成功.必须有一个解释,我正在寻找可以解释原因的人.我附上了两个类的源代码供您参考.
public class ReadWriteTextFile {
static public String getContents(File aFile, String OutPutFileName) {
StringBuilder contents = new StringBuilder();
try {
BufferedReader input = new BufferedReader(new FileReader(aFile));
FileReader x = new FileReader(aFile);
try {
String line = null;
while (( line = input.readLine()) != null){
setContents(OutPutFileName, line + System.getProperty("line.separator"));
}
}
finally {
input.close();
}
}
catch (IOException ex){
ex.printStackTrace();
}
return contents.toString();
}
static public void setContents(String FileName, String aContents)
throws FileNotFoundException, IOException {
try {
FileWriter fstream = …Run Code Online (Sandbox Code Playgroud) 是否可以在Redis中设置一个侦听器,当在Redis中插入项目(值/键)或更改值时触发该侦听器?我研究了Jedis和Redisson库,但一无所获.
我在Android中使用了RxJava和Retrofit 2,我在subscribe()之前调用了subscribeOn(Schedulers.io())android observeOn(AndroidSchedulers.mainThread())全局.但是,有时我想调用subscribeOn(Schedulers.immediate())android observeOn(Schedulers.immediate())来覆盖Scheduler之前设置的同步进程.但我发现它不起作用,android工作仍然会在io()线程上处理,android结果由mainThread()处理.为什么?
我\xe2\x80\x99m 完成本教程并设法将一切设置正常。
\n\n在对计划进行排队时,我收到以下与变量相关的错误,但无法深入了解它。
\n有人对如何推进此事有任何想法吗?谢谢
\n希望这将是一个很容易启动和运行的过程!
\nConfiguring remote state backend...\nInitializing Terraform configuration...\n\nWarning: Value for undeclared variable\n\nThe root module does not declare a variable named "tag_user_name" but a value\nwas found in file "/terraform/terraform.tfvars". To use this value, add a\n"variable" block to the configuration.\n\nUsing a variables file to set an undeclared variable is deprecated and will\nbecome an error in a future release. If you wish to provide certain "global"\nsettings to all configurations in your organization, use TF_VAR_...\nenvironment …Run Code Online (Sandbox Code Playgroud) 有没有办法在Java中禁用序列化对象的缓存?
我有这种情况:
似乎序列化器正在缓存值,或不?
谢谢
从"fredrik"复制此示例并采用我的案例:
public class SerialDeserial {
public static void main(String[] args) {
try {
ChangingObject obj = new ChangingObject();
obj.foo=1;
// Write it
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("test.foo"));
os.writeObject(obj);
os.flush();os.close();
// Read the object
ObjectInputStream is = new ObjectInputStream(new FileInputStream("test.foo"));
ChangingObject objDummy = (ChangingObject)is.readObject();
System.out.println("objDummy.foo is "+objDummy.foo);
// Change it
obj.foo=2;
// Write it
os = new ObjectOutputStream(new FileOutputStream("test.foo"));
os.writeObject(obj);
os.flush();os.close();
// Read the object
is = new ObjectInputStream(new FileInputStream("test.foo"));
objDummy = (ChangingObject)is.readObject();
System.out.println("objDummy.foo …Run Code Online (Sandbox Code Playgroud) 我试图在 Hibernate 中自动生成一个表,但我不断收到错误,它引用的表也定义了一个主键,所以我知道问题是什么。
这是堆栈跟踪
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.catalyst.finalproject.FinalProjectRunner.main(FinalProjectRunner.java:14)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:877)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:805)
at …Run Code Online (Sandbox Code Playgroud) java ×8
unit-testing ×3
android ×1
bash ×1
benchmarking ×1
bigdecimal ×1
c# ×1
eclipse ×1
format ×1
guice ×1
hibernate ×1
io ×1
iphone ×1
jedis ×1
junit ×1
listener ×1
node.js ×1
numbers ×1
postgresql ×1
redis ×1
rx-java ×1
spring ×1
templates ×1
terraform ×1
themes ×1
ubuntu ×1
wicket ×1
windows-10 ×1