2012-06-22 31 views
0

的数据创建字符串时,我创建了一个应用程序,每天自动发送两次。现在我被告知写测试文件。如何测试字符串创建?当使用db

推文本身是由字符串和数据库中的数据生成的。

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); 

我在想,这个怎么测试呢?美元价值和符号不断变化,所以每次实际!=预期。

任何建议将不胜感激!

+3

您可能需要“模拟”某些组件,以便它们返回可靠的值。这样,你可以说“假设我们得到的数字和名称是正确的,我们将产生正确的推文。” – dlev

+0

@dlev我该如何模拟?这些豆给我一个公司对象的工作清单,我无法控制。 – iCodeLikeImDrunk

+1

http://en.wikipedia.org/wiki/Mock_object基本的想法是创建一个外观和行为类似于真实事物的对象,但实际上完全在您的控制之下。因此,不是使用'MagicBean',而是创建一个名为'MyMagicBean'的类,它实现了所有相同的接口和方法,但返回了可预测的一系列值,您可以在其中编写测试。 – dlev

回答

2

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

+0

我没有控制数据,老实说,我不知道它来自哪里,我调用函数,我得到一个对象列表。 – iCodeLikeImDrunk

1

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

+0

这就是我在想什么 – iCodeLikeImDrunk

0

比方说,这是你的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()功能使用的信息。在生产中,它将从数据库或从任何其他存储引擎填充。在开发模式下,从本地数据库快照。

在测试过程中,您通常会将它们填充到您的setUp()方法中。

// setUp() 
List<Activity> activities = new List(); 
activities.add(new Activity("A", 1.10)); 
activities.add(new Activity("B", 2.209)); 

// Expected 
String expected = "Company Most Active ($Vol. in Millions) | A $1.10 | B $2.21"; 

// Real 
String real = genTweet(activities); 

assertEquals(expected, real); 

我要去谈Mock Objects。但这是另一种直观的看法。