好吧,我正在尝试学习一些JavaScript,但这是一个痛苦.
以下代码给了我很多麻烦:
window.onload = function () {
for ( var i = 0; i < seats.length; i++) {
for ( var j = 0; j < seats.length; j++) {
document.getElementById(getSeatId(i, j)).onclick = function(evt) {
getSeatStatus(getSeatId(i, j));
};
}
}
document.getElementById("search").onclick = findSeat;
document.getElementById("male_search").onclick = findMaleSeats;
initSeats();
};
Run Code Online (Sandbox Code Playgroud)
它来自外部js文件,它是链接到页面的唯一文件.findSeat,findMaleSeats,getSeatId,initSeats都是稍后在文件中定义的.当我双击此文件时,我收到以下错误(请注意,这是我的母语翻译):
Windows脚本主机错误:未定义"窗口"代码:800A1391
我已经尝试将代码移动到文件中的其他位置,尝试为window.onload和许多其他东西分配不同的函数(甚至是空函数).看来我的电脑似乎不知道是什么窗口.如果我尝试在浏览器中打开HTML,则无法加载(正如人们所期望的那样).
有人知道这有什么问题吗?
我正在写一些关于分形和随机地形生成的代码.具体来说,我现在使用的是Diamond-Square算法.对于那些不知道的人,它基本上获得了四个值的平均值,并且每一步都添加一个随机数.我将如何测试结果?我应该使用已知种子并手动计算平均值加上随机值,或者是什么?相反,我应该使用随机数计算代码中的结果吗?或者还有另一种方式吗?此外,一些关于逆过程(也就是TDD,代码前的写入测试)的想法将非常感激.
假设有一个实用程序类(没有数据),其中包含一个复杂的(如难以测试的)公共方法.它使用随机数生成,返回大量数据和有趣的东西.但是,如果您在小型私有方法中实现它,每个私有方法都很容易测试,因此整个过程更容易测试.从应用程序的角度来看,只有大方法需要公开,而另一方面应该是私有的.然而,测试私有方法会导致更容易测试类.我该如何处理这个问题?
我知道这是一个主观问题,但我找不到答案.不过我会详细说明:
我有一个具有许多配置方法的类,因此您可以运行具有不同设置的特定算法.正确配置后,只需调用方法"generate()",它就会返回一个填充的2d数组.这是难以测试的方法.这很难,因为它返回一个高度图,其中包含随机性和大量数据.一般来说,我会拆分它,但这会打破封装,因为在实践中数据和算法的步骤也会因同样的原因而改变,而且没有人会使用另一个的separeted.我知道我可以模拟随机性(我实际上正在做),但无论哪种方式,编写测试都是太多的数据(例如,仅32到32的地图在单个测试中需要1024个断言) .除此之外,生成一张大地图最多可能需要3到4秒,这在测试环境中显然不太好.
此外,我首先尝试将数据与算法分开,并使算法纯功能(无数据,仅参数).虽然这是可测试的(因为我拆分算法),这导致大量的参数被传递到周围,并且是一个相当程序化的代码.
所以我不知道如何在这里进行.拆分类使得测试和理解更容易,但也破坏了封装非常糟糕.我会很感激这个主题,无论是实践的还是理论的.
提前致谢.
编辑:这是我编写的代码,类似于程序.
JavaRandom,Attenuation和RandomNumberProcessor是我应该保持在一起的类.
这是算法使用的数据:
package noise;
import noise.attenuation.DefaultAttenuation;
public final class DiamondSquareSettings {
public static final class Builder {
private static final double NEVER_ASSIGNED = 1.1;
private static final long DEFAULT_RNG_SEED = 33609606l;
private static final JavaRandom DEFAULT_RANDOM = new JavaRandom(DEFAULT_RNG_SEED);
private static final double DEFAULT_RANGE = 1;
private static final Attenuation defaultAttenuation = new DefaultAttenuation(0.7);
private Random builderRandom = DEFAULT_RANDOM;
private final double[] builderSeeds = {NEVER_ASSIGNED , NEVER_ASSIGNED , NEVER_ASSIGNED , …Run Code Online (Sandbox Code Playgroud)