Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
403 kez görüntülendi
ios development kategorisinde tarafından

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
tarafından
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.

tarafından

Ö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.

tarafından

Rica ederim, bu konu hakkında yeni bir yazı yayınladım belki faydası olur.

https://medium.com/@huseyinvural/test-ve-unit-testing-hakkında-a08279a397f6

Ayrıca aşağıdaki youtube kanalıda baya faydalı bence, izlemeni öneririm.
https://www.youtube.com/essentialdeveloper

...