如果我正确地做的话,也只是想对下面的代码有其他意见。我编写了一种方法,该方法使用postCode
变量为变量labourCharge
创建一个乘数,以增加昂贵区域的面积。
首先,我需要编写一个公共方法costMultiplier()
,该方法不带任何参数并返回一个double。然后,对于以“ WC1A”或“ EC1A”开头的邮政编码,该方法应返回1.2,否则返回1.0。
public double costMultiplier() {
if (postCode.startsWith("WC1A") || postCode.startsWith("EC1A")) {
return 1.2;
}
else
return 1.0;
我基本上是在创建一个程序来计算地毯的成本和装修。主要类是carpetestimator类,变量是邮政编码和labourCharge。我正在寻找一种简单的方法来测试例如,例如carpetestimator ce = new carpetestimator(4.0); ce.getlabourCharge(); ...因此,基本上,如果我已正确编码,则执行上面的语句后,将显示答案0。那就是我想测试上面的代码的方式。 }
答案 0 :(得分:1)
您可以使用这种方法来测试您的功能并对其进行调整。
public class Sample {
public double costMultiplier(String postCode) {
if (postCode.startsWith("WC1A") || postCode.startsWith("EC1A")) {
return 1.2;
}
else
return 1.0;
}
}
这是使用JUnit的测试类。
import org.junit.Assert;
import org.junit.Test;
public class SampleTest {
@Test
public void test1() {
Sample s = new Sample();
Assert.assertEquals(1.2, s.costMultiplier("WC1A"),0.00001);
}
@Test
public void test2() {
Sample s = new Sample();
Assert.assertEquals(1.2, s.costMultiplier("EC1A"),0.00001);
}
@Test
public void test3() {
Sample s = new Sample();
Assert.assertEquals(1.0, s.costMultiplier("ABC"),0.00001);
}
}
同时添加正面和负面测试都是一个好主意。
对JUnit声明API的引用:http://junit.sourceforge.net/javadoc/index.html?org/junit/Assert.html
答案 1 :(得分:0)
您应将其编写如下:
public double costMultiplier() {
double multiplier = 1.0;
if (postCode != null) {
if (postCode.toUpperCase().startsWith("WC1A") || postCode.toUpperCase().startsWith("EC1A")) {
multiplier = 1.2;
}
}
return multiplier;
}
请注意我的代码中的以下内容:
null
来避免NullPointerException
。postCode
的大写字母与搜索字符串的大写字母进行比较,以使其在任何情况下都适用于postCode
。1.0
。更新:根据您的要求发布以下更新,以提供一些方法进行测试
public class Cost {
String postCode;
public static void main(String[] args) {
Cost cost=new Cost();
cost.postCode="WC1A 9LJ";
System.out.println(cost.costMultiplier());
cost.postCode="9LJ WC1A";
System.out.println(cost.costMultiplier());
cost.postCode="EC1A 9LJ";
System.out.println(cost.costMultiplier());
cost.postCode="9LJ EC1A";
System.out.println(cost.costMultiplier());
cost.postCode=null;
System.out.println(cost.costMultiplier());
cost.postCode="wc1a 9lj";
System.out.println(cost.costMultiplier());
cost.postCode="9lj wc1a";
}
public double costMultiplier() {
double multiplier = 1.0;
if (postCode != null) {
if (postCode.toUpperCase().startsWith("WC1A") || postCode.toUpperCase().startsWith("EC1A")) {
multiplier = 1.2;
}
}
return multiplier;
}
}
输出:
1.2
1.0
1.2
1.0
1.0
1.2
请注意,这是测试方法的快速而肮脏的方法。干净的方法是使用测试框架(例如JUnit)。
答案 2 :(得分:0)
对于此代码,您应该有3个测试用例:“ WC1A”,“ EC1A”和任何随机字符串(以检查其他条件是否正常工作)。使用junit5 @ParameterizedTest
功能,您的测试可能如下所示:
public class SampleTest {
private Sample sample = new Sample();
@ParameterizedTest
@MethodSource("getSource")
void whenGetCostMultiplier_thenReturnCorrectValue(String input, double output) {
sample.setCode(input);
Assert.assertEquals(output, sample.costMultiplier());
}
private static Stream<Object> getSource() {
return Stream.of(
Arguments.of("WC1A", 1.2),
Arguments.of("EC1A", 1.2),
Arguments.of("ABC", 1.0)
);
}
}
基本上,它使用@MethodSource("getSource")
源,并对每个Stream
元素运行相同的测试。该代码将导致使用不同参数的三个测试运行。