【发布时间】:2010-07-27 22:16:31
【问题描述】:
我最近一直在玩 .NET SpeechSynthesizer。
我有一个方法可以接收一个字符串并从该字符串中创建一个 .wav 文件。 但是我如何对这个方法进行单元测试呢?
在我看来,这种情况是单元测试无法帮助您的情况。我说的对吗?
【问题讨论】:
标签: unit-testing junit nunit testing
我最近一直在玩 .NET SpeechSynthesizer。
我有一个方法可以接收一个字符串并从该字符串中创建一个 .wav 文件。 但是我如何对这个方法进行单元测试呢?
在我看来,这种情况是单元测试无法帮助您的情况。我说的对吗?
【问题讨论】:
标签: unit-testing junit nunit testing
你想在这里测试什么?
.NET SpeechSynthesizer API 是编写波形文件还是向编写波形文件的代码输出一些内容?
测试它与测试任何其他依赖项相同。首先隔离它(围绕 NET SpeechSynthesizer API 的薄且可模拟的包装器)。然后验证您的代码为包装器提供了您认为应该提供的内容,并以应有的方式处理任何返回的数据。将 .NET SpeechSynthesizer API 的测试留给其他人(API 的创建者)。
测试包装器是一个集成测试(如果那是你的事,不要让名称阻止你在 TDD 庄园中做它),你可能不得不对你验证的内容非常松散(“Speak(string ) 导致输出文件增长")。但同样,您不需要验证 API 是否有效。
【讨论】:
当代码有这样的副作用时,它不是一个干净的层测试,但你绝对可以测试副作用。将结果写入您的临时目录。验证文件是否实际写入。通过将其加载为波形文件来验证格式。
要验证 WAV 文件中的实际内容,您可能不想直接分析波形文件。在这种情况下,您的测试需要监控发送到 WAV 生成器的参数,以验证它们是否符合预期。
【讨论】:
您可以使用任何语音识别软件吗? 您也许可以尝试训练它来听生成的语音....?
或者您至少可以检查格式是否正确,而不是我猜的零字节文件...
在给定输入句子、语速等的情况下,您还可以获取(或自己生成)关于输出文件的预期长度(在一定误差范围内)的统计信息。
【讨论】: