Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Unit Test Nasıl Yapılır?

0 oy
36 kez görüntülendi
17, Aralık, 2018 ios development kategorisinde csayin tarafından soruldu

Merhabalar,

Unit test yapısını bir uygulamada kullanmak üzere kavramaya çalışıyorum ancak bir türlü sistemi kafamda oturtamadım ve süre olarak biraz kısıtlı zamanda aksiyon almam gerekli. Yapısal olarak bu linkteki .api yapısı benim uygulamama yakın bir yapıda. Bende basitçe bu .api kullanarak bu şekilde verileri parse edip table view'a basıyorum. Bu örnekteki json parse yapısına unit testi nasıl yapabilirim. Konu hakkında yardımlarınızı bekliyorum.

import UIKit

struct User {
    var userId: Int
    var id: Int
    var title: String
    var body: String
    init(_ dictionary: [String: Any]) {
        self.userId = dictionary["userId"] as? Int ?? 0
        self.id = dictionary["id"] as? Int ?? 0
        self.title = dictionary["title"] as? String ?? ""
        self.body = dictionary["body"] as? String ?? ""
    } }

class PostsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let strURL = "https://jsonplaceholder.typicode.com/posts"

    @IBOutlet weak var _tblPosts: UITableView!

    var model = [User]()

    override func viewWillAppear(_ animated: Bool) {

        print("we are starting...")

        self.getDataExample()

    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    func getDataExample() {
        guard let url = URL(string: strURL) else {return}
        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
            guard let dataResponse = data,
                error == nil else {
                    print(error?.localizedDescription ?? "Response Error")
                    return }
            do{

                let jsonResponse = try JSONSerialization.jsonObject(with:
                    dataResponse, options: [])

                //print(jsonResponse)
                print("successful: json respose") //Response result

                guard let jsonArray = jsonResponse as? [[String: Any]] else {
                    return
                }

                for dic in jsonArray{
                    self.model.append(User(dic))
                }
            } catch let parsingError {
                print("Error", parsingError)
            }

            DispatchQueue.main.async {
                self._tblPosts.reloadData()
            }
        }
        task.resume()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return model.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! PostsTVC
        let models = model[indexPath.row]
        cell._lblTitle.text = models.title
        return cell
    }
     }

1 cevap

+1 oy
18, Aralık, 2018 huseyinvural tarafından cevaplandı
18, Aralık, 2018 csayin tarafından seçilmiş
 
En İyi Cevap

Merhaba, yazdıklarımdan yanlış anlayıp gücenmeni istemem amacım seni kırmak değil. Fakat unit test adımına gelmeden önce bu kavramı ve SOLID prensiplerinin felsefesini iyice öğrenmen gerekir.

Bunun için internette bolca kavramsal açıklama yapan kaynak bulabilirsin. Senin kodunda detaylı bir logic olmasada SOLID çerçevesi içinde kodunun yenilenmesi birincil önceliğin olabilir.

Yukardaki kodda her şeyden önce iyi bir style guid kullanmalısın bunun için en yaygın olarak aşağıdakini önerebilirim.
https://github.com/raywenderlich/swift-style-guide

Bunun sonrasında mimari olarak düşündüğümüzde kod içinde UI katmanı ile diğer işlemleri ayırabilirsin. MVVM mimarisini incelemen seni bu konuda bir yerle getirebilir. Düzgün bir mimari ile network katmanınıda ayırdıktan sonra. VC içinde sadece UI bilgilerini atama işlemlerin kalacaktır.

Tüm bunlar tamamlandıktan sonra artık unit lere bölünmüş methodların kalacaktır. Artık bunların bireysel olarak doğru sonuç verip vermediğini Test SDK üzerindeki methodlar ile kontrol edebilirsin.

Sabırlı bir şekilde yukarıdaki ilk adımları izlersen zaten kendiliğinden Unit test kavramını daha iyi çözeceksin. Bu adıma gelmeden anlatacağımız her şey kafanı daha çok karıştırır.

18, Aralık, 2018 csayin tarafından yorumlandı

Öncelikle cevabınız için teşekkür ederim. Altyapı gerektiren bir konuda eksik ve yetersiz durumda kalırsam sizinde dediğiniz gibi daha sona büyük problemler yaşanması kacınılmaz. Verdiginiz tavsıyeleri ve dökümanları inceleyerek daha sağlıklı bir ilerleme sağlayacağım. Teşekkür ederim.

...