首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在测试中避免重复

在测试中避免重复
EN

Stack Overflow用户
提问于 2015-06-15 01:07:08
回答 1查看 62关注 0票数 1

在我的测试中,我需要对每个函数重复这段测试。在本例中,我正在测试坏请求函数,每个测试之间需要更改的是错误请求调用、代码和错误。

代码语言:javascript
运行
复制
(deftest t-bad-request
      ...

    (testing "with data"
        (equal (merge error code message DATA) (bad-request MESSAGE DATA)))

    (testing "without message and with data"
        (equal (merge error code DATA) (bad-request nil, DATA))))

在clojure中解决这个问题的“正确方法”是什么?宏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-15 03:12:48

是的,我认为在clojure中宏就是这样做的。以您的代码为例,并对bad-requesterror和其他内容做了一些自由的假设,我编写了以下示例:

代码语言:javascript
运行
复制
(require '[clojure.test :refer [deftest testing is]])

; dummy implementations, here will be your real bad-request & error
(defn bad-request [& more] more)
(def error {:status :error})

(defmacro deftest-request [name code message MESSAGE DATA & body]
  `(deftest ~name
     (testing "with data"
       (is (= (merge error ~code ~message ~DATA) (bad-request ~MESSAGE ~DATA))))

     (testing "with data"
       (is (= (merge error ~code ~message ~DATA) (bad-request ~MESSAGE ~DATA))))

     ~@body))

; Some messages will only be tested about bad requests
(deftest-request some-request-test
  {:code 401} {:message "hello"} "HELO" {:data "WORLD"})

; Other messages can have more tests at the end of a deftest-request
(deftest-request some-complex-request-test
  {:code 829} {:message "a-complex-message"} "IM COMPLEX" {:data "VERY COMPLEX"}

  (testing "request returns something interesting"
    (is (= "I'm cool" (run-request {:message "a-complex-message"})))))

deftest-request将运行两个常见的错误请求测试,以及传递给它的任何附加形式。

当然,您应该考虑使用这种方法与普通的旧测试之间的权衡。在大多数情况下,做普通的老测试是很明显的.但是,如果您有许多类似的测试和/或复杂的测试准备,宏可能会有所帮助。

应用这种技术的一个很好的例子是在sqlingvo测试套件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30836135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档