NutzCN Logo
问答 单元测试中的ioc缺少propertiesProxy ,是需要自己运行NbApp的方法创建propertiesProxy注入吗
发布于 840天前 作者 道道 1330 次浏览 复制 上一个帖子 下一个帖子
标签:

测试方法中使用dao的时候提示,缺少propertiesProxy。于是写成了下面这样

public class MyNutTestRunner extends NutTestRunner {

    public MyNutTestRunner(Class<?> klass) throws InitializationError {
        super(klass);
    }

    //可以不写,最后是被super.createIoc调用
    public Class<?> getMainModule() {
        return MainLauncher.class;
    }

    /**
     * 可覆盖createIoc,实现参数覆盖, bean替换,等定制.
     */
    protected Ioc createIoc() {

        Ioc ioc = null;
        try {
            ioc = new NutIoc(new ComboIocLoader("*js", "ioc/", "*anno", "cn.wizzer", "org.nutz", "io.nutz", "com.zhumaoyu.quantization"));
          //=================以下为关键=========
  //因为测试类里找不到propertiesProxy,这里手动注入
            NbApp nbApp = new NbApp();
            nbApp.prepareBasic();
            nbApp.prepareConfigureLoader();
            PropertiesProxy propertiesProxy = nbApp.getAppContext().getConf();
            ioc.addBean("propertiesProxy", propertiesProxy);
//============
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ioc;
    }
}
1 回复

论坛没有修改功能的吗.....
想问是不是应该这么写?或者有其他更好的写法?
单元测试如下

@RunWith(MyNutTestRunner.class)
@IocBean // 必须有
public class StockBasicServiceTest {

    @Inject
    StockBasicService stockBasicService;

    @Inject
    Dao dao;
    
    @Test
    public void testUpdate() throws SQLException {
        stockBasicService.update();
    }
    
    @Test
    public void createtable() {
        dao.create(StockBasic.class, true);
    }
}

启动类如下

@IocBean(create="init", depose="depose")

public class MainLauncher {
    public void init() {
         }
    }
    public void depose() {}

    public static void main(String[] args) throws Exception {
        new NbApp().setArgs(args).setPrintProcDoc(true).run();
    }
}
添加回复
请先登陆
回到顶部