LiveData在JUnit测试中返回null

时间:2019-04-26 08:01:00

标签: android junit android-livedata

我有这样的Room DAO课

$(document).ready(function(){

        $.material.init();

        // Code for the Validator
        var $validator = $('.wizard-card form').validate({
              rules: {
              firstname: {
                   required: true,
                },
              lastname: {
                   required: true,
                },

              skills: {
                 required: true,
              },
          },

        messages: {
                skills: {
                    required: 'Please select at least 2 things.',
                }
            },

            errorPlacement: function(error, element) {
                $(element).parent('div').addClass('has-error');
             },

     });

我尝试为其中一种方法编写检测测试,并且它始终返回null,我将规则设置为Instanttaskexecutorrule,但livedata.value仍返回null,下面是我的测试代码

<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.js"></script>
<div class="card wizard-card">
    <form action="" post="">
       <div class="col-sm-5 col-sm-offset-1">
         <div class="input-group">
            <div class="form-group label-floating">
                <label class="control-label">First Name</label>
                <input name="firstname" type="text" class="form-control">
            </div>
         </div>
      </div>
      <div class="col-sm-5">
          <div class="input-group">
            <div class="form-group label-floating">
                <label class="control-label">Last Name</label>
                <input name="lastname" type="text" class="form-control">
            </div>
          </div>
      </div>
      <div class="col-sm-10 col-sm-offset-1">
          <div class="form-group label-floating">
            <label class="control-label">Professional Skills</label>
            <input type="text" value="hairdresser" data-role="tagsinput" class="form-control" name="skills[]" id="skilltags" />
          </div>
      </div>
   </form>
</div>

getAllSourceCategoryItems()总是失败,因为来自dao的livedata为空,如何解决此问题?

1 个答案:

答案 0 :(得分:0)

正如@blackbelt在上述评论中所说,我们需要观察该方法返回的实时数据来解决问题,这个库帮助我无需编写大量样板代码即可测试实时数据

https://github.com/jraska/livedata-testing

我已经更改了我的考试

@Test
fun getAllSourceCategoryItems() {
    // test insert a source item

    val testSource = Source("foo", 1)
    db.sourceDao().insertSource(testSource)
    val livedata =  db.sourceDao().getAllSourceItems()
    livedata.test().assertValue(listOf(testSource))

}