0

我已经编写了以下代码,我已经设法测试了 Get 语句,但是如何测试下面代码中的 void 语句,如您所见,我使用 flygplan2.andraHojd 更改了 int,但是如何显示结果我可以在 skrivaUTinfo 类中展示它吗)

请看下面的代码

//Klass
public class FlygPlan {
    int hojd;
    int flygriktning;
    int hastighet;
    String modellbeteckning;
    //Konstruktor
    public FlygPlan(int hojd, int flygriktning, int hastighet, String modellbeteckning) {
        this.hojd = hojd;
        this.flygriktning = flygriktning;
        this.hastighet = hastighet;
        this.modellbeteckning = modellbeteckning;


    }
    //Main-metoden
    public static void main(String[] args) {
        FlygPlan flygplan1 = new FlygPlan (1000, 1, 60 , "Hejsan");
        FlygPlan flygplan2 = new FlygPlan (10, 4, 70, "Sohail");
        flygplan1.skrivaUt();


        flygplan2.andraHojd(60,70);



    }

    public void andraHojd(int hojd, int nyHojd)
    {
        hojd = nyHojd;
    }
    public static int visaHojd(int hojd)
    {
        return hojd;
    }
    public void andraRiktning(int flygriktning, int nyFlygriktning)
    {
        flygriktning = nyFlygriktning;
    }
    public static int visaRiktning(int flygriktning)
    {
        return flygriktning;
    }
    public void andraHastighet(int hastighet, int nyHastighet)
    {
        hastighet = nyHastighet;
    }
    public static int visaHastighet(int hastighet)
    {
        return hastighet;
    }
    public void andraModellBeteckning(int modellbeteckning, int nyModellbeteckning)
    {
        modellbeteckning = nyModellbeteckning;
    }
    public static String visaModellBeteckning(String modellbeteckning)
    {
        return modellbeteckning;

    }

    public void skrivaUt()
    {
    System.out.println(" flygets modellbeteckning är " +modellbeteckning);
    System.out.println(" flygets flygriktning är " +flygriktning);
    System.out.println(" flygets hastighet är " +hastighet);
    System.out.println(" flyget flyger på  höjd(m) " +hojd);



    }




}
4

3 回答 3

0

void表示方法不返回任何内容。

一种测试方法是放置 aSystem.out.println()并检查它是否被调用。并且您可以在调用 setter 后使用 getter 打印该值。

我确实在您的代码中看到了一些问题:

A.static返回实例成员的getter方法;

B. getter 通常不带任何参数。我不认为你想那样做。

public static int visaHastighet(int hastighet)
{
    return hastighet;
}

它应该是这样的:

public int visaHastighet()
{
    return hastighet;
}

C. 您的设置器放置不正确,因为它只修改局部变量。

public void andraHojd(int hojd, int nyHojd)
{
    hojd = nyHojd;
} 

它应该是这样的:

public void andraHojd(int hojd)
{
    hojd = nyHojd;
} 
于 2012-08-07T16:47:06.727 回答
0
public void andraHojd(int hojd, int nyHojd)
{
    hojd = nyHojd;
}

这个 setter 方法以及类似的方法可能不是您想要的。您将一个整数变量作为参数传递(hojd)并根据另一个方法参数设置它的值(nyHojd)。当方法存在时,这种状态变化将丢失。我想你想要的是:

public void andraHojd(int hojd)
{
    this.hojd = hojd;
}

至于你的问题:

如何测试下面代码中的 void 语句,如您所见,我使用 flygplan2.andraHojd 更改 int,但是如何显示更改的结果,我可以在 skrivaUTinfo 类中显示它)

您可以在类上编写一个toString()方法来打印出它的成员字段,然后简单地在一个实例上调用它FlygPlan

@Override public String toString() { return "hojd = " + this.hojd" + " flygriktning = " this.flygriktning; }

于 2012-08-07T16:47:46.173 回答
0

我最初发现这段代码有几处有问题。

你为什么做你的吸气剂static?这意味着它们不与任何特定的对象实例相关联,因此实际上无法工作。

但是,您不会注意到这一点,因为您将一个值传递给您的“getter”,该方法直接返回 out。这是有意的(可能不是,因为该方法什么都不做)?Getter 通常不带参数,并返回一个实例字段,例如:

public int visaHojd()
{
    return hojd;
}

在类似的意义上,您将两个参数传递给您的 setter,这也是不寻常的 - 特别是您的方法再次什么都不做(它设置一个局部变量然后退出,没有“外部可见”的更改)。hojd您传入的第一个参数会隐藏hojd字段并将其隐藏,因此该字段永远不会更新。您可以将 setter 简单地编写为:

public void andraHojd(int nyHojd)
{
    hojd = nyHojd;
}

要回答有关测试的实际问题,您需要考虑这些方法实际声明的用途。在类的上下文中,setter 的声明效果是什么?对于这个简单的类,这意味着对 getter 的下一次调用将返回该值。所以你不能孤立地测试那个方法;您需要一起调用这些方法来测试它们是否满足此要求。

可能是这样的:

public void testSetter() {
    int testValue = 42; // arbitrary
    FlygPlan testObj = new FlygPlan();

    // do the test
    testObj.andraHojd(testValue);
    int result = testObj.visaHojd();

    // assert correctness, i.e. that the same value was returned from the
    // getter as was passed to the setter (would usually use something like
    // JUnit here)
    assert testValue == result;
}
于 2012-08-07T16:42:30.807 回答