Mocktio Scala中模拟功能的行为

时间:2018-09-28 03:21:07

标签: scala playframework mockito

我正在开发一个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
}

1 个答案:

答案 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>)
   }