操作系统:Windows 7。Jython 2.7.0“最终版本”。
for token in sorted_cased.keys():
freq = sorted_cased[ token ]
if freq > 1:
print( 'token |%s| unicode? %s' % ( token, isinstance( token, unicode ), ) )
if re.search( ur'\p{L}+', token ):
print( ' # cased token |%s| freq %d' % ( token, freq, ))
Run Code Online (Sandbox Code Playgroud)
sorted_cased是一个显示令牌出现频率的字典。这里我试图筛去话,其与频率发生(仅Unicode字符)> 1.(NB我使用了re.match而不是search但search应检测在事件1个这样\ p {L} token)
示例输出:
token |Management| unicode? True
token |n| unicode? True
token |identifiés| unicode? True
token |décrites| unicode? True
token |agissant| …Run Code Online (Sandbox Code Playgroud) 假设我有一个Map<String, Action>,我会这样:
assertThat( spyActionMap.get( "a" ) ).isInstanceOf( Action.class );
Run Code Online (Sandbox Code Playgroud)
...通过。现在我想检查获得的Action是否正确:
assertThat( spyActionMap.get( "a" ) ).isInstanceOf( Action.class ).getValue( Action.NAME ).isEqualTo( "Go crazy" );
Run Code Online (Sandbox Code Playgroud)
...无法编译,这并不奇怪。有什么办法可以做到这种事情吗?
有商榷这里有关测试和单身......但是这是关于Java模式。
我的问题特别是关于@Singleton实现此模式的Groovy (注释)方式的。
这似乎是Groovy Goodness的另一点。但是,在使用具有此批注的类进行测试(使用Spock)时,我有一个问题。
如果测试(从原始的,只是构建的状态)在任何的这个实例的状态发生变化的,据我的实验表明,那么这将通过进行下一个测试...我测试MySingletonClass.instance的hashCode()几个测试和他们都回来了一样。也许这并不奇怪。
但是...如果Spock能够(使用我只能推测的那种超级格罗维魔术)以某种方式重置测试之间的类,那会更好吗?即通过创建新实例?
有一个明显的解决方法:将一个reset方法合并到每个@Singleton类中,在测试期间其状态可能会更改。然后reset在setup()...中调用该方法,实际上我使用了一个公共Specification子类CommonProjectSpec,从中可以得到我所有的Specifications子类...这样就很容易实现。
但这似乎有点不雅。还有其他选择吗?我应该将其作为Spock建议的增强功能提交吗?
PS还可以证明您不能再创建Spy此类(或GroovySpy)。但是您可以使用Mock它:
ConsoleHandler mockCH = Mock( ConsoleHandler ){
getDriver() >> ltfm
}
GroovyMock( ConsoleHandler, global: true )
ConsoleHandler.instance = mockCH
Run Code Online (Sandbox Code Playgroud)
...是的,GroovyMock这里的“全局” 实际上具有“驯服”静态instance场的能力,以便它温柔地接受Mock巢中的杜鹃。
...特别是在Groovy中(因此标记)?
在Java中,您无法执行此操作...但是在动态语言(例如Python)中,您通常可以执行此操作。
given在Eclipse中尝试执行Spock功能块(即测试方法)中的操作的尝试:
Groovy:此处不期望类定义。请在适当的地方定义课程,或者尝试使用块/关闭。
...一个“合适的”地方显然不在功能范围之内。这将是笨拙而不是笨拙的。在使用Groovy几个月后,我感觉到Groovy应该何时提供groovier。
因此,说我想扩展我的abstract类AbstractFoo并创建一个新的子类Foo,在我的功能中,有什么方法可以“使用块/关闭”来实现类似的功能?
我刚刚开始了一个新的Gradle项目.在我之前的build.gradles中,我一直在这样做:
compile 'org.codehaus.groovy:groovy-all:2.4.15'
testCompile 'org.spockframework:spock-core:1.1-groovy-2.4'
Run Code Online (Sandbox Code Playgroud)
......还有这些依赖关系:
testCompile 'net.bytebuddy:byte-buddy:1.6.11'
testCompile 'org.objenesis:objenesis:2.6'
Run Code Online (Sandbox Code Playgroud)
通过反复试验的过程,我发现Groovy 2.4.15带有这些Bytebuddy和Objensis依赖项使我能够模拟BufferedReader.这在我想模拟用户输入到控制台的控制台应用程序中证明是有用的.因此,"控制台处理程序"类具有以下字段/属性:
def br = new BufferedReader( new InputStreamReader(System.in, 'UTF-8' ))
Run Code Online (Sandbox Code Playgroud)
在app类中使用如下来获取用户控制台输入:
String response = br.readLine().trim()
Run Code Online (Sandbox Code Playgroud)
...这意味着Spock测试可以做这样的事情:
def 'prompt should show help on entering H'() {
given:
consoleHandler.br = Mock( BufferedReader )
consoleHandler.br.readLine() >> 'h'
Run Code Online (Sandbox Code Playgroud)
即模拟控制台上字母h的输入.
...但它不适用于Groovy 2.5.3及其匹配的Spock依赖项:对于这个新项目,我把:
compile 'org.codehaus.groovy:groovy-all:2.5.3'
testCompile 'org.spockframework:spock-core:1.2-groovy-2.5'
Run Code Online (Sandbox Code Playgroud)
...具有相同的ByteBuddy和Objenisis依赖项.我得到以下测试失败:
java.lang.IllegalArgumentException异常:无法在net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:140)在net.bytebuddy.TypeCache $ WithInlineExpunction.findOrInsert(TypeCache.java:346)在net.bytebuddy.TypeCache.findOrInsert创建类型(TypeCache.java:161)在net.bytebuddy.TypeCache $ WithInlineExpunction.findOrInsert(TypeCache.java:355)在org.spockframework.mock.runtime.ByteBuddyMockFactory.createMock(ByteBuddyMockFactory.java:41)在org.spockframework.mock. runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:42)在org.spockframework.mock.runtime.JavaMockFactory.createInternal(JavaMockFactory.java:58)在org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:38)在org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:42)在org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:46)在org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java :294)在org.spockframework.lang.SpecInternals.creat eMockImpl(SpecInternals.java:284)在org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:100)在core.FirstSpec.setup(first_tests.groovy:20)
产生的原因:java.lang.NoSuchMethodError:net.bytebuddy .dynamic.loading.ClassInjector $ UsingLookup.isAvailable()Z org.spockframework.mock.runtime.ByteBuddyMockFactory.determineBestClassLoadingStrategy(ByteBuddyMockFactory.java:103)at org.spockframework.mock.runtime.ByteBuddyMockFactory.access $ 300(ByteBuddyMockFactory.java: 27)在org.spockframework.mock.runtime.ByteBuddyMockFactory $在org.spockframework.mock.runtime.ByteBuddyMockFactory $ 1.call 1.call(ByteBuddyMockFactory.java:54)(ByteBuddyMockFactory.java:43)在net.bytebuddy.TypeCache.findOrInsert (TypeCache.java:138)
任何Groovyüber-geeks在那里?
我最近了解到Sun的/ Oracle最新指南说,任何Swing对象(包括构造函数)的Swing方法都不能在EDT之外调用.
相同的严格标准是否也适用于所有"视觉"AWT课程?如果没有,**对他们来说是什么规则?
后来
re Swing和EDT:2009年的讨论.
引用:"除了实际的线程安全性和相关问题,如可见性和同步,我认为是一个软件问题.Swing组件通常具有某种类型的"监听器",并且这些监听器设计为在EDT上执行.
由于这些侦听器是异步的并且响应事件(如属性更改),因此可以在构建GUI时触发这些侦听器.结果是,当您在主线程中构建时,某些侦听器正在EDT上执行,并且一些侦听器也可能在其他线程上运行(因为侦听器混淆并在错误的线程上触发).结果是巨大的不可预测的混乱."
也许他们不知道他们在谈论什么......但目前我采取的是"更安全而不是抱歉"的方法.Potochkin,http: //weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html 似乎也认为我们熟悉后来更严格的规则
这个问题解释了如何System.in在运行任务时使用来运行项目中的特定类。
但对我来说,目前它不起作用:尽管我已将application插件和以下几行包含在build.gradle:
mainClassName = "misc.StreamsExp"
run{
standardInput = System.in
}
task stream( type: JavaExec, dependsOn: assemble ){
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
Run Code Online (Sandbox Code Playgroud)
下面的应用程序代码中的行readLine应该是阻塞的,但事实并非如此:
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));
String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
System.out.println( "spuds");
enteredLine = br.readLine();
}
Run Code Online (Sandbox Code Playgroud)
...相反,事情会永远旋转:
土豆土豆
土豆
土豆
...
注意,我使用的是 Windows 10 操作系统,带有 Java 8.91。我尝试过 Windows DOS 控制台和 Cygwin。
NB2 当我在 Eclipse(Gradle STS Eclipse …
从CUT被测类中摘录:
def compileOutputLines( TopDocs topDocs ) {
println "gubbins"
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
def "my feature"(){
given:
CUT stubCut = Stub( CUT ){
compileOutputLines(_) >> { TopDocs mockTD ->
// NB no Exception is thrown
// try {
println "babbles"
callRealMethod()
println "bubbles"
// }catch( Exception e ) {
// println "exception $e"
// }
}
}
CUT spyCut = Spy( CUT ){
compileOutputLines(_) >> { TopDocs mockTD ->
println "babbles 2"
callRealMethod()
println "bubbles 2"
}
}
when:
stubCut.compileOutputLines( …Run Code Online (Sandbox Code Playgroud) groovy Singleton(在Groovy 2.6中注意,如果要包含显式构造函数,必须将strict设置为false)
@Singleton( strict = false )
class test {
private test(){
//some Method call
}
private test(def x){
//some Method call
}
}
Run Code Online (Sandbox Code Playgroud)
test.groovy
def test1 = test.instance
Run Code Online (Sandbox Code Playgroud)
当我发出以下声明时,它适用于我,我可以看到defualt构造函数被调用
如何在使用第二个construcor参数时创建instanace
如果我发出
def test2 = test("anish").instance
Run Code Online (Sandbox Code Playgroud)
它抛出我的错误如何解决这个任何建议
groovy.lang.MissingMethodException: No signature of method: test.test() is applicable for argument types: (java.lang.String) values: [anish]
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:78)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:143)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:151)
Run Code Online (Sandbox Code Playgroud) 我有一半期待被"欺骗".但在SO,甚至其他语言中似乎没有这样的Pythonic"大脑练习".
说我有一个"允许的"列表[ 45, 6, 155, 44 ],我提交了一个列表[ 6, 44, 19, 12 ]:我只想知道一个有效,优雅和完美的算法来获得结果:
LEGAL: [ 6, 44 ]
ILLEGAL: [ 19, 12 ]
Run Code Online (Sandbox Code Playgroud)
PS目前使用2.7但3.x答案也欢迎!