"We believe we have picked the ideal person as captain," Mohammed Jalal Yunus of the Bangladesh Cricket Board said in a statement.
"Apart from his obvious match-winning ability, Mortaza is a proven fighter and has the experience. He can inspire and motivate the team. This is a new challenge for him and we know that he loves challenges."
Mortaza has so far bagged 78 wickets in 35 Tests, and 135 in 103 one-day internationals.
All-rounder Shakib Al Hasan was named as his deputy.
Bangladesh will play two Tests, three one-dayers and one Twenty20 match on the West Indies tour, starting next month.
They will then tour Zimbabwe for five one-day internationals in August.
Ashraful, who led the country for two years, came under fire when his team failed to qualify for the World Twenty20 Super Eights after losing both of their league matches against India and Ireland. He contributed just 25 runs.
"The board wants to sincerely thank Ashraful for his contribution as skipper," Yunus added. "The decision to replace him was taken with the intention of relieving the load on him so that he can play his natural game.
"We all know his quality and what he is capable of as a batsman and we are confident that without the burden of captaincy his batting would flourish and he would contribute more to the team."
Bangladesh Test squad: Mashrafe Mortaza (capt), Shakib Al Hasan (vice-capt), Tamim Iqbal, Zunaed Siddique, Mohammad Ashraful, Roqibul Hassan, Mushfiqur Rahim, Mehrab Hossain Jr, Shahadat Hossain, Rubel Hossain, Mahbubul Alam, Imrul Kayes, Mohammad Mahmudullah, Enamul Haque Jr, Sahagir Hossain.
Source: AFP Global Edition