日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Python單元測試之道:從入門到精通

來源: 責(zé)編: 時間:2024-01-15 09:22:03 223觀看
導(dǎo)讀單元測試是軟件開發(fā)中不可或缺的一部分,有助于確保代碼的正確性、可維護(hù)性和可擴(kuò)展性。在Python中,有豐富的工具和庫可用于進(jìn)行單元測試。本文將為你提供一個全面的指南,從入門到精通,輕松掌握Python單元測試的方方面面。

hNf28資訊網(wǎng)——每日最新資訊28at.com

單元測試是軟件開發(fā)中不可或缺的一部分,有助于確保代碼的正確性、可維護(hù)性和可擴(kuò)展性。在Python中,有豐富的工具和庫可用于進(jìn)行單元測試。本文將為你提供一個全面的指南,從入門到精通,輕松掌握Python單元測試的方方面面。hNf28資訊網(wǎng)——每日最新資訊28at.com

一、入門單元測試

1、什么是單元測試?

單元測試是對代碼中的最小單元進(jìn)行測試,通常是函數(shù)或方法。其目標(biāo)是檢查這些單元是否按預(yù)期工作。單元測試通常涵蓋函數(shù)的各種輸入和邊界條件,以確保代碼的正確性。hNf28資訊網(wǎng)——每日最新資訊28at.com

2、Python的unittest模塊

Python的標(biāo)準(zhǔn)庫提供了unittest模塊,用于編寫和運(yùn)行單元測試。這是一個功能強(qiáng)大的工具,可以幫助你組織測試用例、運(yùn)行測試套件和生成測試報告。hNf28資訊網(wǎng)——每日最新資訊28at.com

3、編寫第一個單元測試

從一個簡單的示例開始,編寫一個函數(shù)并為其編寫單元測試。hNf28資訊網(wǎng)——每日最新資訊28at.com

# mymath.pydef add(a, b):    return a + b
# test_mymath.pyimport unittestfrom mymath import addclass TestAddition(unittest.TestCase):    def test_add_integers(self):        result = add(2, 3)        self.assertEqual(result, 5)if __name__ == '__main__':    unittest.main()

在上面的示例中,編寫了一個簡單的add函數(shù),然后編寫了一個單元測試類TestAddition,并在其中定義了一個測試方法test_add_integers,該方法使用self.assertEqual()來驗(yàn)證add函數(shù)的行為是否正確。hNf28資訊網(wǎng)——每日最新資訊28at.com

二、單元測試的基本概念

1、測試用例

測試用例是單元測試的基本單元,它包含一個或多個測試方法,用于測試代碼的不同方面。通常,每個測試方法對應(yīng)一個功能或函數(shù)。hNf28資訊網(wǎng)——每日最新資訊28at.com

2、斷言

斷言是單元測試中用于驗(yàn)證代碼行為的關(guān)鍵部分。它們是一種強(qiáng)有力的工具,用于檢查代碼是否按預(yù)期工作。Python的unittest模塊提供了多種斷言方法,以幫助你驗(yàn)證期望值和實(shí)際值之間的關(guān)系。hNf28資訊網(wǎng)——每日最新資訊28at.com

下面是一些常用的unittest斷言方法:hNf28資訊網(wǎng)——每日最新資訊28at.com

assertEqual(first, second, msg=None)

用于驗(yàn)證兩個值是否相等。如果firstsecond相等,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertEqual(result, expected)

assertNotEqual(first, second, msg=None)

用于驗(yàn)證兩個值是否不相等。如果firstsecond不相等,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertNotEqual(result, expected)

assertTrue(expr, msg=None)

用于驗(yàn)證表達(dá)式expr的值是否為True。如果expr為True,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertTrue(result)

assertFalse(expr, msg=None)

用于驗(yàn)證表達(dá)式expr的值是否為False。如果expr為False,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertFalse(result)

assertIn(member, container, msg=None)

用于驗(yàn)證member是否在container中。如果membercontainer中,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertIn(item, container)

assertNotIn(member, container, msg=None)

用于驗(yàn)證member是否不在container中。如果member不在container中,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertNotIn(item, container)

assertIsNone(expr, msg=None)

用于驗(yàn)證表達(dá)式expr的值是否為None。如果expr為None,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertIsNone(result)

assertIsNotNone(expr, msg=None)

用于驗(yàn)證表達(dá)式expr的值是否不為None。如果expr不為None,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertIsNotNone(result)

assertRaises(exc, callable, *args, **kwds)

用于驗(yàn)證調(diào)用callable時是否引發(fā)了異常exc。如果callable引發(fā)了exc異常,斷言通過,否則失敗。hNf28資訊網(wǎng)——每日最新資訊28at.com

self.assertRaises(ValueError, some_function, arg1, arg2)

這些斷言方法使得編寫單元測試更容易,因?yàn)樗鼈兲峁┝素S富的比較和驗(yàn)證選項(xiàng),幫助檢查代碼的正確性。根據(jù)測試需求,選擇適當(dāng)?shù)臄嘌苑椒ǎ瑏砭帉懭娴臏y試用例。hNf28資訊網(wǎng)——每日最新資訊28at.com

3、測試套件

測試套件(Test Suite)是一組測試用例的集合,用于一次性運(yùn)行多個測試。在Python的unittest框架中,可以使用unittest.TestLoader來自動發(fā)現(xiàn)和加載測試用例,并將它們組織成一個測試套件。hNf28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建和運(yùn)行測試套件的基本步驟:hNf28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)入必要的模塊和類:hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittest

創(chuàng)建一個測試用例類,該類繼承自unittest.TestCase。在這個類中,可以定義多個測試方法,每個方法用于測試不同的代碼單元。hNf28資訊網(wǎng)——每日最新資訊28at.com

class MyTestCase(unittest.TestCase):    def test_method1(self):        # 測試代碼1    def test_method2(self):        # 測試代碼2

創(chuàng)建一個測試套件對象,使用unittest.TestLoaderloadTestsFromTestCase()方法自動加載測試用例:hNf28資訊網(wǎng)——每日最新資訊28at.com

loader = unittest.TestLoader()suite = loader.loadTestsFromTestCase(MyTestCase)

運(yùn)行測試套件,可以使用unittest.TextTestRunner來運(yùn)行測試并輸出結(jié)果:hNf28資訊網(wǎng)——每日最新資訊28at.com

runner = unittest.TextTestRunner()runner.run(suite)

這樣,可以一次性運(yùn)行多個測試方法,查看測試結(jié)果,以確保代碼的正確性。測試套件的使用有助于組織和管理大量的測試用例,使測試過程更加高效和可維護(hù)。hNf28資訊網(wǎng)——每日最新資訊28at.com

以下是一個完整的示例:hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestclass MathTestCase(unittest.TestCase):    def test_addition(self):        self.assertEqual(1 + 1, 2)    def test_subtraction(self):        self.assertEqual(3 - 1, 2)if __name__ == '__main':    loader = unittest.TestLoader()    suite = loader.loadTestsFromTestCase(MathTestCase)    runner = unittest.TextTestRunner()    runner.run(suite)

運(yùn)行上述代碼將執(zhí)行MathTestCase類中的兩個測試方法,并輸出測試結(jié)果。測試套件的使用可以更好地組織和運(yùn)行測試,以確保代碼的正確性。hNf28資訊網(wǎng)——每日最新資訊28at.com

4、4setUp()和tearDown()

setUp()  tearDown() 是在每個測試方法之前和之后執(zhí)行的特殊方法,用于準(zhǔn)備測試環(huán)境和清理測試資源。這些方法是在 unittest 框架中的測試用例類中定義的,以確保每個測試方法都在相同的起始和結(jié)束狀態(tài)下運(yùn)行。hNf28資訊網(wǎng)——每日最新資訊28at.com

setUp()

setUp() 方法在每個測試方法之前執(zhí)行,通常用于準(zhǔn)備測試所需的資源、數(shù)據(jù)或設(shè)置。這可以包括創(chuàng)建對象、打開文件、建立數(shù)據(jù)庫連接等。通過在 setUp() 中完成這些準(zhǔn)備工作,可以確保每個測試方法都在相同的初始條件下運(yùn)行,從而提高測試的一致性。hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestclass MyTestCase(unittest.TestCase):    def setUp(self):        # 在每個測試方法之前執(zhí)行的準(zhǔn)備工作        self.data = [1, 2, 3, 4, 5]    def test_method1(self):        # 測試方法1使用了setUp中準(zhǔn)備的self.data        self.assertEqual(sum(self.data), 15)    def test_method2(self):        # 測試方法2也可以使用setUp中準(zhǔn)備的self.data        self.assertIn(3, self.data)if __name__ == '__main__':    unittest.main()

tearDown()

tearDown() 方法在每個測試方法執(zhí)行后執(zhí)行,用于清理測試過程中產(chǎn)生的資源或數(shù)據(jù)。包括關(guān)閉文件、斷開數(shù)據(jù)庫連接等。通過在 tearDown() 中進(jìn)行清理工作,確保測試過程不會留下不必要的資源或垃圾。hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestclass MyTestCase(unittest.TestCase):    def setUp(self):        # 在每個測試方法之前執(zhí)行的準(zhǔn)備工作        self.file = open("test.txt", "w")    def tearDown(self):        # 在每個測試方法執(zhí)行后執(zhí)行的清理工作        self.file.close()    def test_file_operation(self):        # 測試文件操作        self.file.write("Test data")        self.assertEqual(self.file.read(), "Test data")if __name__ == '__main__':    unittest.main()

使用 setUp()  tearDown() 方法可以確保測試方法之間的隔離性,同時也有助于提高測試代碼的可維護(hù)性和可重用性。在每個測試方法中,可以使用 setUp() 中準(zhǔn)備的資源,然后在 tearDown() 中清理這些資源,以確保測試過程的一致性。hNf28資訊網(wǎng)——每日最新資訊28at.com

三、高級單元測試技巧

1、參數(shù)化測試

有時需要針對不同的輸入?yún)?shù)運(yùn)行相同的測試方法。unittest支持參數(shù)化測試,使用@unittest.parameterized.parameterized裝飾器來實(shí)現(xiàn)。hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestfrom mymath import addclass TestAddition(unittest.TestCase):    @unittest.parameterized.parameterized([        (2, 3, 5),        (0, 0, 0),        (-1, 1, 0)    ])    def test_add_integers(self, a, b, expected):        result = add(a, b)        self.assertEqual(result, expected)

2、跳過和期望異常

在單元測試中,有時可能需要跳過某些測試方法或者期望測試方法引發(fā)異常。Python的unittest框架使用@unittest.skip()@unittest.expectedFailure來實(shí)現(xiàn)這些需求。hNf28資訊網(wǎng)——每日最新資訊28at.com

跳過測試方法

有時,希望跳過某個測試方法,以便在未來修復(fù)它之前不運(yùn)行它。可以使用@unittest.skip(reason)裝飾器來標(biāo)記一個測試方法,告訴unittest跳過這個方法。reason參數(shù)是可選的,用于說明為什么跳過這個測試方法。hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestclass MyTestCase(unittest.TestCase):    @unittest.skip("這個測試方法暫時跳過")    def test_method1(self):        # 測試代碼    def test_method2(self):        # 測試代碼

在上面的示例中,test_method1被標(biāo)記為跳過,因此它不會在運(yùn)行時執(zhí)行。而test_method2將繼續(xù)運(yùn)行。hNf28資訊網(wǎng)——每日最新資訊28at.com

期望異常

有時,希望測試方法引發(fā)異常,以確保它們能夠正確處理異常情況。可以使用@unittest.expectedFailure裝飾器來標(biāo)記一個測試方法,告訴unittest期望它會失敗,即引發(fā)異常。hNf28資訊網(wǎng)——每日最新資訊28at.com

import unittestclass MyTestCase(unittest.TestCase):    @unittest.expectedFailure    def test_method1(self):        # 這個測試方法期望引發(fā)異常        with self.assertRaises(SomeException):            # 測試代碼    def test_method2(self):        # 正常的測試方法

在上面的示例中,test_method1被標(biāo)記為期望失敗,因此即使它引發(fā)了異常,unittest也不會將其標(biāo)記為失敗。而test_method2將繼續(xù)運(yùn)行。hNf28資訊網(wǎng)——每日最新資訊28at.com

這些功能有助于在測試代碼時更靈活地處理特定情況,以及在修復(fù)問題之前跳過某些測試方法。hNf28資訊網(wǎng)——每日最新資訊28at.com

3、Mock和Stub

Mock和Stub是單元測試中常用的模擬對象或函數(shù),用于模擬外部依賴的行為。Python提供了一些庫,如unittest.mock,用于創(chuàng)建模擬對象。hNf28資訊網(wǎng)——每日最新資訊28at.com

from unittest.mock import Mockdef test_function():    # 創(chuàng)建一個模擬對象    mock_obj = Mock()    # 模擬對象的行為    mock_obj.some_method.return_value = 42    result = mock_obj.some_method()    assert result == 42

四、測試覆蓋率和持續(xù)集成

1、測試覆蓋率

測試覆蓋率是一種度量標(biāo)準(zhǔn),用于衡量測試是否覆蓋了代碼中的各個部分。幫助了解哪些代碼已經(jīng)被測試,哪些代碼還沒有被測試,從而有助于提高代碼的質(zhì)量和可靠性。Python社區(qū)提供了許多工具來測量測試覆蓋率,其中最常用的是coverage.pyhNf28資訊網(wǎng)——每日最新資訊28at.com

什么是coverage.py?

coverage.py 是Python的一種測試覆蓋率工具,幫助分析代碼中哪些部分被測試覆蓋,哪些部分未被測試覆蓋。通過收集有關(guān)代碼執(zhí)行的信息,coverage.py生成覆蓋率報告,了解測試覆蓋的程度。hNf28資訊網(wǎng)——每日最新資訊28at.com

如何使用coverage.py?

要使用coverage.py來測量測試覆蓋率,首先需要安裝:hNf28資訊網(wǎng)——每日最新資訊28at.com

pip install coverage

接下來,使用coverage run命令來運(yùn)行你的測試套件,同時收集代碼覆蓋率信息。例如:hNf28資訊網(wǎng)——每日最新資訊28at.com

coverage run -m unittest discover

這將運(yùn)行單元測試,并收集覆蓋率數(shù)據(jù)。hNf28資訊網(wǎng)——每日最新資訊28at.com

要生成覆蓋率報告,可以使用coverage report命令:hNf28資訊網(wǎng)——每日最新資訊28at.com

coverage report

報告將顯示哪些代碼行被測試覆蓋,哪些未被覆蓋,以及測試覆蓋率的百分比。hNf28資訊網(wǎng)——每日最新資訊28at.com

另外,還可以使用coverage html命令生成HTML格式的覆蓋率報告,以便更詳細(xì)地查看覆蓋情況:hNf28資訊網(wǎng)——每日最新資訊28at.com

coverage html

這將生成一個htmlcov文件夾,其中包含HTML格式的報告文件,可以在瀏覽器中查看。hNf28資訊網(wǎng)——每日最新資訊28at.com

為什么測試覆蓋率重要?

測試覆蓋率是評估測試質(zhì)量的一個指標(biāo)。較高的測試覆蓋率通常表示你的測試用例覆蓋了更多的代碼路徑,從而降低了潛在的bug和問題。然而,測試覆蓋率并不是唯一衡量測試質(zhì)量的標(biāo)準(zhǔn),因此它應(yīng)該與其他測試方法一起使用,以確保代碼的正確性、可維護(hù)性和可擴(kuò)展性。hNf28資訊網(wǎng)——每日最新資訊28at.com

總之,coverage.py是一個有用的工具,可以幫助你測量測試覆蓋率,了解哪些代碼已經(jīng)被測試,哪些代碼還需要更多的測試用例。它有助于提高代碼質(zhì)量,并減少潛在的問題。hNf28資訊網(wǎng)——每日最新資訊28at.com

2、持續(xù)集成

持續(xù)集成(Continuous Integration,CI)是一種開發(fā)實(shí)踐,旨在通過自動化構(gòu)建、測試和部署,確保每次代碼提交都是可運(yùn)行的,從而提高軟件開發(fā)的效率和質(zhì)量。持續(xù)集成工具可以自動構(gòu)建、測試和部署你的應(yīng)用程序,以確保代碼變更不會引入新的問題。hNf28資訊網(wǎng)——每日最新資訊28at.com

以下是一些常見的持續(xù)集成工具,它們可以集成單元測試并在每次代碼變更時運(yùn)行測試套件:hNf28資訊網(wǎng)——每日最新資訊28at.com

Jenkins

Jenkins是一個流行的開源持續(xù)集成工具,它支持各種編程語言和測試框架。你可以配置Jenkins以在代碼提交后自動觸發(fā)構(gòu)建和測試過程,從而快速發(fā)現(xiàn)問題。hNf28資訊網(wǎng)——每日最新資訊28at.com

Travis CI

Travis CI是一個云托管的持續(xù)集成服務(wù),專門用于GitHub倉庫。它可以輕松集成單元測試,并在每次代碼推送到GitHub時自動運(yùn)行測試套件。hNf28資訊網(wǎng)——每日最新資訊28at.com

CircleCI

CircleCI是另一個流行的持續(xù)集成工具,它支持各種編程語言和框架。你可以配置CircleCI以自動運(yùn)行測試,并將測試結(jié)果報告集成到你的開發(fā)工作流中。hNf28資訊網(wǎng)——每日最新資訊28at.com

GitHub Actions

GitHub Actions是GitHub自家提供的一項(xiàng)集成服務(wù),它允許你在GitHub倉庫中配置工作流,包括構(gòu)建和測試。你可以創(chuàng)建自定義的GitHub Actions工作流來運(yùn)行單元測試并確保代碼的質(zhì)量。hNf28資訊網(wǎng)——每日最新資訊28at.com

GitLab CI/CD

GitLab CI/CD是GitLab集成的持續(xù)集成和持續(xù)交付工具。它允許你在GitLab倉庫中配置CI/CD管道,包括自動構(gòu)建和測試。hNf28資訊網(wǎng)——每日最新資訊28at.com

通過使用這些持續(xù)集成工具,可以確保每次代碼變更都經(jīng)過測試,從而盡早地發(fā)現(xiàn)和解決問題。這有助于提高軟件質(zhì)量、加快開發(fā)速度,并提供可靠的軟件產(chǎn)品。集成單元測試到持續(xù)集成流程是軟件開發(fā)中的一項(xiàng)關(guān)鍵實(shí)踐,有助于減少潛在的問題和錯誤。hNf28資訊網(wǎng)——每日最新資訊28at.com

五、最佳實(shí)踐

1、命名規(guī)范

良好的命名規(guī)范對于單元測試非常重要。測試用例和測試方法的命名應(yīng)清晰明了,以便其他開發(fā)人員理解測試的目的。hNf28資訊網(wǎng)——每日最新資訊28at.com

2、頻繁運(yùn)行測試

應(yīng)該經(jīng)常運(yùn)行單元測試,以確保代碼的及時檢查和修復(fù)。最好能夠?qū)y試自動化,并在每次代碼提交時運(yùn)行測試套件。hNf28資訊網(wǎng)——每日最新資訊28at.com

3、編寫?yīng)毩⒌臏y試

測試用例應(yīng)該相互獨(dú)立,不應(yīng)該依賴于其他測試的結(jié)果。這有助于快速識別和定位問題。hNf28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

單元測試是Python編程中的關(guān)鍵實(shí)踐,有助于確保代碼的正確性和可維護(hù)性。通過合理的單元測試,可以在開發(fā)過程中快速發(fā)現(xiàn)和解決問題,提高代碼質(zhì)量,減少潛在的錯誤。單元測試是每個Python開發(fā)者都應(yīng)該掌握的技能,有助于構(gòu)建可靠的軟件應(yīng)用。hNf28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-60992-0.htmlPython單元測試之道:從入門到精通

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Kafka 除了用作消息隊列還能干嗎?

下一篇: 分享八個常用的 JavaScript 庫,讓你顯得更專業(yè)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰(zhàn)略發(fā)布會結(jié)束之后,Redmi總經(jīng)理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • K60至尊版狂暴引擎2.0加持:超177萬跑分?jǐn)孬@性能第一

    Redmi的后性能時代戰(zhàn)略發(fā)布會今天下午如期舉辦,在本次發(fā)布會上,Redmi公布了多項(xiàng)關(guān)于和聯(lián)發(fā)科的深度合作,以及新機(jī)K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 紅魔電競平板評測:大屏幕硬實(shí)力

    前言:三年的疫情因?yàn)橐暇W(wǎng)課的原因激活了平板市場,如今網(wǎng)課的時代已經(jīng)過去,大家的生活都恢復(fù)到了正軌,這也就意味著,真正考驗(yàn)平板電腦生存的環(huán)境來了。也就是面對著這種殘酷的
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • 把LangChain跑起來的三個方法

    使用LangChain開發(fā)LLM應(yīng)用時,需要機(jī)器進(jìn)行GLM部署,好多同學(xué)第一步就被勸退了,那么如何繞過這個步驟先學(xué)習(xí)LLM模型的應(yīng)用,對Langchain進(jìn)行快速上手?本片講解3個把LangChain跑起來
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • Android 14發(fā)布:首批適配機(jī)型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發(fā)布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機(jī),同時發(fā)布了Androi
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個大學(xué)生兼職QQ群。群主“七王”在群里介紹一些刷單賺
  • 親歷馬斯克血洗Twitter,硅谷的苦日子在后頭

    文/劉哲銘  編輯/李薇  馬斯克再次揮下裁員大刀。  美國時間11月14日,Twitter約4400名外包員工遭解雇,此次被解雇的員工的主要工作為內(nèi)容審核等。此前,T
Top 主站蜘蛛池模板: 临漳县| 陵水| 驻马店市| 桂平市| 黄平县| 镇江市| 汾西县| 凤阳县| 安远县| 酒泉市| 桂林市| 怀安县| 芮城县| 新泰市| 绵竹市| 浪卡子县| 疏附县| 关岭| 青川县| 共和县| 永靖县| 玛曲县| 聊城市| 松江区| 宿迁市| 龙陵县| 绩溪县| 张家口市| 南京市| 杭州市| 建瓯市| 深圳市| 金湖县| 资源县| 旌德县| 平乡县| 康定县| 济南市| 那曲县| 车致| 黄骅市|