kullanarak atanan bir işlevi alay etmek için midje'yi kullanamıyorum: Durum şu: Ben B fonksiyonunu çağıran birim sınama işlevi A çalışıyorum. B fonksiyonu, bir sapan try + bloğunda ve belirli koşullar altında çağrılır Bir sapan atışı + kullanarak atabilir. Midje testinde B fonksiyonu ile uğraşmak istiyorum, böylece try + bloğundaki yakalamanın aslında yakalayacağı bir şey döndürüyor. Ama atmak için doğru şeyi yaratamam gibi görünmüyor. İşte kod ve testin esas kısaltılmış taslak verilmiştir:Neden slingshot'ın atışı +
(defn function-A
[param]
(try+
(function-B param)
(catch [:type :user-not-found]
(do-something))))
(defn function-B
[param]
(throw+ [:type :user-not-found]))
(fact "do-something is called"
(function-A "param") => (whatever is the result of calling do-something)
(provided
(function-B "param") =throws=> (clojure.lang.ExceptionInfo. "throw+: {:type :user-not-found}"
{:object {:type :user-not-found}, :environment {}}
nil)))
Ben atma olduğumu ExceptionInfo roughtly doğru şey gibi görünüyor. Uygulamam çok sayıda prn ifadesiyle çalışırken bunu görebiliyorum. Bununla birlikte, ne çalışırsam çalışırım, testin işe yaramam.
Ayrıca, sorunu anlayabildiğimi görmek için bir kodda aşağıdaki kodun birazını da denedim. Bununla birlikte, her iki kod parçası da aynı İstisnaları içermekle birlikte, sadece bir tanesi (saf sapan olanı) yakalayıp "yakala" yazmayı başarır. Birinin neden çalıştığını ve diğerinin neden olmadığını anlayabilseydim, problemi birim testi ile çözebileceğimi düşünüyorum.
(try+
(try
(throw+ {:type :user-not-found})
(catch Exception e
(prn "Caught: " e)
(prn "Class: " (.getClass e))
(prn "Message: " (.getMessage e))
(prn "Cause: " (.getCause e))
(prn "Data: " (.getData e))
(throw e)))
(catch [:type :user-not-found] p
(prn "caught it")))
(try+
(try
(throw (clojure.lang.ExceptionInfo. "throw+: {:type :user-not-found}"
{:object {:type :user-not-found}, :environment {}}
nil))
(catch Exception e
(prn "Caught: " e)
(prn "Class: " (.getClass e))
(prn "Message: " (.getMessage e))
(prn "Cause: " (.getCause e))
(prn "Data: " (.getData e))
(throw e)))
(catch [:type :user-not-found] p
(prn "caught it")))
Bu harika. Kesinlikle işe yarıyor. Ünite test kodumda, sadece = throws => (slingshot-exception {: type: user-not-found} 'demek için bir fonksiyon yarattım. Fonksiyon: = (sapan-istisna [istisna-harita] ] (slingshot.support/get-throwable (slingshot.support/make-context istisna-haritası (str "throw +:" harita) (slingshot.support/stack-trace) {}))). Sorunumu çözdüğünüz için çok teşekkürler. –