Java 如何测试字符串创建?使用数据库中的数据创建字符串时

Java 如何测试字符串创建?使用数据库中的数据创建字符串时,java,string,testing,Java,String,Testing,我创建了一个应用程序,每天自动推两次。现在我被告知要编写测试文件 tweet本身由字符串和数据库中的数据生成 String actual = genTweet(); String expected = "Company Most Active ($Vol. in Millions) | SCZZL $19.5 | HUTC $18.1 | TSCDY $18.0 | TOELY $16.2 | GBGM $15.7 | More at: http://www.website.co

我创建了一个应用程序,每天自动推两次。现在我被告知要编写测试文件

tweet本身由字符串和数据库中的数据生成

String actual = genTweet();        
String expected = "Company Most Active ($Vol. in Millions) | SCZZL $19.5 | HUTC $18.1 | TSCDY $18.0 | TOELY $16.2 | GBGM $15.7 | More at: http://www.website.com/home";
assertEquals(expected, actual);
我在想,到底要怎么测试呢?美元价值和符号不断变化,因此每次都是实际的!=预料之中


任何建议都将不胜感激

如何使用一些正则表达式来匹配,但不包括可变部分

如何使用一些正则表达式来匹配,但不包括可变部分

您通常不会对生产服务器运行测试。相反,使用可预测数据完全在您控制下的测试服务器。

您通常不会对生产服务器运行测试。相反,请使用一个测试服务器,其可预测数据完全在您的控制之下。

假设这是您的
genTweet()
函数:

public String getTweet(List<Activity> activities) {
  String tweetText = "Company Most Active ($Vol. in Millions)";
  for (Activity activity : activities) {
    tweetText = String.format("%s | %s $%.02f", tweetText, activity.getCompanyName(), activity.getMoney());
  }
  return tweetText;
}

我本来想说的。但这是另一种直观的方式。

假设这是您的
genTweet()
函数:

public String getTweet(List<Activity> activities) {
  String tweetText = "Company Most Active ($Vol. in Millions)";
  for (Activity activity : activities) {
    tweetText = String.format("%s | %s $%.02f", tweetText, activity.getCompanyName(), activity.getMoney());
  }
  return tweetText;
}

我本来想说的。但这是另一种直观的方式。

您可能需要“模拟”某些组件,以便它们返回可靠的值。这样,你就可以说“假设我们得到的数字和名字都是正确的,我们就会发出正确的推特。”@dlev我该怎么嘲笑?bean返回我无法控制的公司对象的工作列表。其基本思想是创建一个看起来和行为都像真实事物的对象,但实际上完全在您的控制之下。因此,您没有使用
MagicBean
,而是创建了一个名为
MyMagicBean
的类,该类实现了所有相同的接口和方法,但返回一系列可预测的值,您可以根据这些值编写测试。@dlev既然我在推特上发了5家公司,我应该创建5个对象,每个对象都有属性符号和dollarValue?然后我使用这些对象创建“实际”tweet,然后对照“预期”进行测试?我走对了吗?基本上是的。您提到bean返回了一个公司工作列表。因此,您不是使用该bean,而是创建一个新的类来模仿该bean。它可能有一个
getcompanys()
方法,这就是返回公司的方法。因此,在模拟bean上,您还编写了一个
getcompanys()
方法。但是,与从数据库/webservice/where获取公司不同,您只需返回公司对象的硬编码列表。您可能需要“模拟”某些组件,以便它们返回可靠的值。这样,你就可以说“假设我们得到的数字和名字都是正确的,我们就会发出正确的推特。”@dlev我该怎么嘲笑?bean返回我无法控制的公司对象的工作列表。其基本思想是创建一个看起来和行为都像真实事物的对象,但实际上完全在您的控制之下。因此,您没有使用
MagicBean
,而是创建了一个名为
MyMagicBean
的类,该类实现了所有相同的接口和方法,但返回一系列可预测的值,您可以根据这些值编写测试。@dlev既然我在推特上发了5家公司,我应该创建5个对象,每个对象都有属性符号和dollarValue?然后我使用这些对象创建“实际”tweet,然后对照“预期”进行测试?我走对了吗?基本上是的。您提到bean返回了一个公司工作列表。因此,您不是使用该bean,而是创建一个新的类来模仿该bean。它可能有一个
getcompanys()
方法,这就是返回公司的方法。因此,在模拟bean上,您还编写了一个
getcompanys()
方法。但不是从数据库/网络服务/任何地方获取公司,而是返回一个公司对象的硬编码列表。这也是我所想的。这也是我所想的。我无法控制数据,老实说,我不知道它来自何处,我调用函数我获取一个对象列表。我无法控制数据,老实说,我不知道它从哪里来,我调用函数,得到一个对象列表。