我正在开发一个编程游戏,玩家可以访问一个抽象类,并将其扩展到控制机器人的行为。因为这是一个编程游戏,所以我试图保护我的游戏架构体系,这样玩家就不会扰乱游戏,而不仅仅是我给他们的类;为此,我让我的大部分类成为最终的,但现在我不能嘲笑他们在我的单元测试(mockito testNG)。
所以我想知道,我该如何解决这个问题?有没有一种方法可以让类保持非final的状态以供测试,然后在构建周期的后期自动地“final
-ize”它们(我正在使用maven,以防它与答案相关)。我不想添加其他外部库或更改模拟库
如果不可能,那么第二个问题是:制作一个类final
真的安全吗?我看到一些库可以从字节码中删除final
分类器,这让我认为如果可以从已编译的类中删除final
分类器,那么它可能是无用的
您最终可以尝试应用自动重构工具,如Jackpot 3或重构。我从未对它们进行过测试,但如果采用重构的方式,它们完全可以做你想做的事情。
另一种方法是使用Powermock,它允许模拟期末考试和静力学(即使很难,我也不喜欢模拟静力学,因为它表明您的设计中存在错误)。
您总是可以使用委托而不是继承。
public interface Foo {
// ...
}
public final class FooImpl implements Foo {
// ...
}
public class MockFooImpl implements Foo {
private FooImpl delegate;
// ...
}
然而,在API中使用抽象类是个坏主意。界面会更好。
首先,你不能通过宣布事情“最终”来阻止人们干扰你的游戏。有一些反射技巧和完整的代码生成库,这使得克服这个问题有点不方便。
所以,输掉决赛,然后你可以使用jmock或任何你喜欢的库来进行模拟。
其中authUser()定义为final,如下所示: 我正在学习如何使用PowerMock模拟非静态方法,以及Powermockito是否可以模拟非final具体类中的final方法?。我尝试了一些变体,例如使用Mockito而不是PowerMock来存根authUser,以及将apiclientconnection.class添加到PrepareForTest注释中。我不明白为什么它不起作用。我
问题内容: 这个问题已经在这里有了答案 : 匿名内部类显示不正确的修饰符 (4个答案) 去年关闭。 据我正确理解 总是: 这已经在 但是,当我运行以下代码来检查它是否显示该类不是。 上面程序的输出是: 请清除我的疑问,因为我无法理解此行为。 问题答案: 显式 是在源代码中写的东西。因此,如果将某些东西声明为,则意味着该类是 明确的final 。 隐式 不是在源代码中写下的,而是在某种构造的上下文中
阻止子类重写 final 可以通过标记为final来阻止一个方法、属性或者下标脚本被重写. 通过在方法、属性或者下标脚本的关键字前写final修饰符(比如final var, final func, final class func, final subscript) 此时由于加上了final修饰, 此方法不允许子类重写
我正在尝试用Groovy编写一些Spock测试,以测试一些Java代码(特别是一个servlet过滤器)。我有一些和变量想要模拟,但我无法确定是否有方法可以这样做。我知道可用于方法,对于变量有类似的东西吗? 感谢十五世。我现在可以用以下内容来设置:
我有一段代码,用来创建一个新目录。我想做一个chmod-r 755./destdirectory
我目前正试图模拟类中的私有final static对象。我的目标似乎没有被恰当地模仿。 示例: 代码:在主类中 嘲笑:在我的测试课上,我有 但是obj不返回我在执行时指定的值 并将实际运行。 任何建议都将是有帮助的,我也不能改变Main类中的任何代码,谢谢。