我正在开发一个Scala and Play应用程序,并试图为我的一个单元测试编写一个模拟程序。
def getActionAsBase64(
appName: String = null,
taskType: String = null,
taskName: String = null
): String = {
val pwd = System.getProperty("user.dir")
val filePath = Paths.get(pwd, "..", "tasks", appName, taskType, taskName, taskName + ".zip").toString
val simplified = Files.simplifyPath(filePath)
// Reading the file as a FileInputStream
val file = new File(simplified)
val in = new FileInputStream(file)
val bytes = new Array[Byte](file.length.toInt)
in.read(bytes) // stream inserts bytes into the array
in.close()
// Encoding the file using Base64encoder
val encoded =
new BASE64Encoder()
.encode(bytes)
.replace("\n", "")
.replace("\r", "")
return encoded.toString
}
以上是我的原始代码,我试图模拟in.read
的行为,并使其向bytes
数组中注入任意数据。
到目前为止,我只能找到使用thenReturn
方法进行简单模拟的方法,该方法模拟返回值。
在我的情况下,我还是想模拟函数的行为,理想情况下,它应该做类似的事情
def mockRead(bytes) {
// mutate the bytes parameter
}
答案 0 :(得分:2)
您需要一种注入模拟文件或读取文件的函数的方法
接受函数的API的示例
unsafe
这样,您就可以通过一个读取文件的测试功能,
unsafe
替代方法可以是传入MaterialUI,
class EditMode extends Component {
changeComps = (e) => {
console.log(e.target.value);
};
render() {
let compOptions = this.props.compOptions.map((val, idx) => {
return (
<li key={idx} data-key={idx} style={{backgroundColor: this.props.compCheckedVal === idx ? '#30C1C6' : 'white'}}>
<input type="radio" value={val} />
<label htmlFor="">{val === 'No Coverage' ? val.toUpperCase() : val}</label>
</li>
)
});
return (
<div className='editDetails'>
<div className="row">
<div className="col">
{this.props.compDeductTitle}
</div>
</div>
<div className="row">
<div className="col">
<ul onChange={this.changeComps}>
{compOptions}
</ul>
</div>
</div>
..........
</div>)
}